资讯专栏INFORMATION COLUMN

property在python2和python3中的区别

dayday_up / 452人阅读

摘要:问题背景源于公司的原来的代码是开发的,后来改为开发,设计到的的用法有点不一样直接上代码公司原来的的代码运行代码这个代码在下面执行没有问题,但是在下面执行,会报错,在执行的时候报错

问题背景: 源于公司的原来的代码是python2开发的,后来改为python3开发,设计到的property的用法有点不一样

直接上代码

公司原来的python2的代码

class LineItem:

    def __init__(self, description, weight, price):
        self.description = description
        self.__weight = weight
        self.price = price

    @property
    def weight(self):
        return self.__weight

    @weight.setter
    def set_weight(self, value):
        if value > 0:
            self.__weight = value
        else:
            raise ValueError("weight must be > 0")

运行代码

In [2]: l = LineItem("a", 3, 6)

In [3]: l.weight
Out[3]: 3

In [4]: l.weight = 5

In [5]: l.weight
Out[5]: 5

这个代码在python2下面执行没有问题,但是在python3下面执行,会报错,在执行In [4]: l.weight = 5的时候报错

In [4]: l.weight = 5
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in 
----> 1 l.weight = 5

AttributeError: can"t set attribute

解决方法

按理说,上面的那种写法不是很规范,无论是在python2还是python3的文档实例里面都不是这么写的,所以为了简便和不出错,我们统一使用下面的这种写法

class LineItem:

    def __init__(self, description, weight, price):
        self.description = description
        self.__weight = weight
        self.price = price

    @property
    def weight(self):
        return self.__weight

    @weight.setter
    def weight(self, value):
        if value > 0:
            self.__weight = value
        else:
            raise ValueError("weight must be > 0")

主要区别在于这一行def weight(self, value):

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45084.html

相关文章

  • 同样是Python,Python3Python2怎么区别这么大?

    摘要:可是当我测试,我就懵逼了,中文真都验证通过,不对啊,我以前也是这么过滤参数的,测试没问题啊唯一的区别是现在用的是。 上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非Python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。可是当我测试,我就懵逼了,中文真T...

    Raaabbit 评论0 收藏0
  • 同样是Python,怎么区别这么大

    摘要:可是当我测试,我就懵逼了,中文真都验证通过,不对啊,我以前也是这么过滤参数的,测试没问题啊唯一的区别是现在用的是。 发现问题 上周,我的测试同事告诉我,你的用户名怎么还允许中文啊?当时我心里就想,你们测试肯定又搞错接口了,我用的是正则w过滤了参数,怎么可能出错,除非Python正则系统出错了,那是不可能的。本着严谨的作风,我自己先测试一下,没问题看我怎么怼回去。可是当我测试,我就懵逼了...

    lovXin 评论0 收藏0
  • python2python3区别

    摘要:与的区别默认编码方式是码。中输入内容分为和两个函数,前者只接受文本输入,而在中只有且统一将用户的输入存储为对象。中不再使用和后缀说明长整型。 python2与python3的区别python2默认编码方式是ascii码。(可在文件的首行:# -*- encoding:utf-8 -*...

    番茄西红柿 评论0 收藏2637
  • 聊聊Python 3 的字符串:str bytes 的区别

    摘要:的字符串有两种和,的字符串也有两种和。不同字符的不同表现,让的和显得扑朔迷离。在中,严格区分了和,不同类型之间操作就会抛出的异常。和之间的转换一图胜千言和的相互转换指的是具体的编码规则的名称,对于中文来说,它可以是这些值等等。 Python2的字符串有两种:str 和 unicode,Python3的字符串也有两种:str 和 bytes。Python2 的 str 相当于 Pytho...

    AWang 评论0 收藏0
  • Linux的基本开发环境搭建

    摘要:以下方式将安装和。而中的可能版本比较老,可以从其中安装最新的版本。检查的版本一旦你已经安装了,你可以使用如下所示的方法检查的版本。 0.安装命令小技巧 1、DEB软件安装 安装命令 sudo dpkg -i xxx.deb 2、安装过程中可能会报缺少依赖的错,执行下面命令自动安装依赖 sudo apt-get install -f 3、再次执行安装命令 sudo dpkg -i x...

    zhigoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<