python之中特性(attribute)与属性(property)有啥区别
这个问题很拗口,很高级,但其实也很简单,可能直接看代码,尝试着用几次,自然就理解了,这里我写一个例子,比如啊class Circle(object): def __init__(self, radius): self.radius = radius @property def diameter(self): return self.radius * 2 @diameter.setter def diameter(self, new_diameter): self.radius = new_diameter / 2
还是不懂,没关系,我解释一下。例子中,我定义一个圆圈类,圆圈(circle)嘛,肯定有直径(diameter)有半径(radius)的,我可以简单的设置他们为attribute, 比如class Circle(object): def __init__(self, radius,diameter): self.radius = radius self.diameter = diameter这样写没有问题,我们实例化的时候,比如class Circle(object): def __init__(self, radius,diameter): self.radius = radius self.diameter = diametermy_circle = Circle(2,4)print(\u0026#39;radius is {}\u0026#39;.format(my_circle.radius))print(\u0026#39;diameter is {}\u0026#39;.format(my_circle.diameter))#change the radius into 6 my_circle.radius = 6print(\u0026#39;radius is {}\u0026#39;.format(my_circle.radius))print(\u0026#39;diameter is {}\u0026#39;.format(my_circle.diameter))看下运行结果radius is 2diameter is 4radius is 6diameter is 4发现问题了没有?一开始的时候,我们让半径等于2,直径等于4,那是因为我们知道对圆圈来说啊,这是肯定的事情。但是实际写代码过程中,我可能要去更改我的半径,比如说,让半径等于6,当然我在让半径等于6的时候,直径怎么还是4?因为代码不知道直径是半径的2倍,当然我可以暴力的把直径改为12,但我更希望,程序自己能在我把半径变成6的时候自动把直径变成12,或者当我需要改直径为10的时候,程序能把半径自动的变成5. 如果有这个需求的时候,@property就上场了,如同我一开始给出的例子这样,试试下面这个代码class Circle(object): def __init__(self, radius): self.radius = radius @property def diameter(self): return self.radius * 2 @diameter.setter def diameter(self, new_diameter): self.radius = new_diameter / 2my_circle = Circle(2)print(\u0026#39;radius is {}\u0026#39;.format(my_circle.radius))print(\u0026#39;diameter is {}\u0026#39;.format(my_circle.diameter))#change the radius into 6 my_circle.radius = 6print(\u0026#39;radius is {}\u0026#39;.format(my_circle.radius))print(\u0026#39;diameter is {}\u0026#39;.format(my_circle.diameter))#change the diameter into 6 my_circle.diameter = 6print(\u0026#39;radius is {}\u0026#39;.format(my_circle.radius))print(\u0026#39;diameter is {}\u0026#39;.format(my_circle.diameter))结果是不是和我一样?radius is 2diameter is 4radius is 6diameter is 12radius is 3.0diameter is 6.0现在明白了么?其实property是一个有点函数意思的attribute,两者虽然字面上一致,或者说翻译成中文意思上基本没差别,但使用上是完全俩个不同的东东。如果实在理解不了,可以先跳过去,等用到或者碰到的时候,跑一下代码就明白了:)
至于你下面pygame的那个问题,我还是建议你去找例子跑代码运行,老实说,简单的让我不知道怎么回答:)
推荐阅读
- 怎样成为一名合格的Python程序员?
- python 爬虫,咋获得输入验证码之后的搜索结果
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 零基础入门学习啥语言好
- Python3.4和3.5区别大么
- python 中 def_():...... return _有啥作用
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 30岁男,创业失败转行学python,是否很晚?也不好找工作?
- Python 的开发速度比 C#.net 或 Vb.net 更快吗?
- 16年毕业,建筑环境与设备工程专业,干的一直是工程想转IT专业,想从python入手请问咋开始学习
