一个 Property decorator 的例子 , 运行后跟书上的不一样

2015-01-08 17:54:40 +08:00
 reloop
# person2.py
class person:
  def __init__(self,name='', age=0):
    self._name = name
    self._age = age

  @property
  def age(self):
    return self._age

  @age.setter
  def age(self, age):
    if 0 < age <= 150:
      self._age = age

  def set_age(self, age):
    if 0 < age <= 150:
      self._age = age

  def __str__(self):
    return "person(%s , %s)" % (self._name, self._age)

  def __repr__(self):
    return str(self)

然后

>>> import person2 as pe
>>> p = pe.person('Lia' , 20)
>>> p
person(Lia, 20)
>>> p.age
20
>>> p.age = 33
>>> p.age
33
>>> p
person( Lia, 20) # 为什么这里不会改变?
>>> p.set_age(100)
>>>p
person(Lia, 100)
>>>p.age
33 # 不是100 么?

书上用的 python3 我在 fedora 上用的 python2.7
是这个原因吗?

2992 次点击
所在节点    Python
6 条回复
regex
2015-01-08 18:42:44 +08:00
python3下两个问题都不存在。。
输出为person( Lia, 33)和100
lcqtdwj
2015-01-08 19:00:50 +08:00
class person(object)
reloop
2015-01-09 08:12:47 +08:00
@lcqtdwj 谢谢 , 测试成功
是不是可以总结成
只要用到 `@property` , 都要继承 Object 类?
mengzhuo
2015-01-09 10:43:02 +08:00
@reloop

这是新老class的问题╮(╯▽╰)╭
lcqtdwj
2015-01-09 14:26:52 +08:00
@reloop python2自定义类现在都要继承object,new-style对象。
reloop
2015-01-09 14:35:54 +08:00
@mengzhuo
@lcqtdwj

谢谢!!!!!!!!!!!!!!!!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/160394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX