专栏首页python3property在python2和py

property在python2和py

  • 问题背景: 源于公司的原来的代码是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)
<ipython-input-4-3c1df6104a5e> in <module>
----> 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):

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python中的*使用

      在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用。

    py3study
  • python3面向对象注意事项

    2.obj.hello()  #Zzc中执行hello方法 3.Zzc中无hello方法,在父类Yun中寻找hello方法。 4.类Yun中无hello方法,在...

    py3study
  • Python -- collection

            Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections

    py3study
  • C++版 - 剑指Offer 面试题35:第一个只出现一次的字符 解题报告(华为OJ034-找出字符串中第一个只出现一次的字符)

    题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。(2006年google的一道笔试题。)

    Enjoy233
  • Python 基础视频课 - 1. 编程概论

    第一节课交个朋友,大家可以免费看视频课和看课件 (图片格式),但如要获得 PDF 课件和 Jupyter Notebook 还需付费才行。看完视频看完课件如果觉...

    用户5753894
  • 【Hadoop】Hadoop 2.x 完全分布式环境搭建

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • BigData集群搭建

    “本文主要介绍大数据相关集群搭建,包括hadoop集群、zookeeper集群、hbase集群、spark集群等”

    搬砖俱乐部
  • Hadoop(二)搭建伪分布式集群

    前言   前面只是大概介绍了一下Hadoop,现在就开始搭建集群了。我们下尝试一下搭建一个最简单的集群。之后为什么要这样搭建会慢慢的分享,先要看一下效果吧! 一...

    用户1195962
  • 马化腾六年后知乎再提问:未来十年哪些基础科学突破会影响互联网科技产业?

    “未来十年哪些基础科学突破会影响互联网科技产业?产业互联网和消费互联网融合创新,会带来哪些改变?”

    量子位
  • Kubernetes DNS Service技术研究

    本文主要是对kubernetes 1.2和1.3的DNS Service的内部实现分别进行研究,得出其内部实现框架和交互逻辑,并对它们的实现进行了比较。 Kub...

    Walton

扫码关注云+社区

领取腾讯云代金券