【发布时间】:2014-05-18 16:41:30
【问题描述】:
据我了解,Pythonic 方式的一个方面是使用类的直接成员变量访问,直到需要“getters/setters”为止。代码可在Ideone获得
class Person():
def __init__(self, name, age=None, friends=None):
self.name = name
self.age = age
if friends is None:
self.friends = []
else:
self.friends = friends
me = Person('Mr. Me')
you = Person('Ms. You')
me.age = 42
me.friends.append(you)
由于 @property 装饰器方法,这种对成员变量 age 的访问可以在将来“转换”为“getter/setter”接口,而无需重写将其设置为 42 的行。但是最后一行呢我在哪里将you 添加到我的friends 列表中? Person 类是否有可能拦截 append() 调用并采取其他操作? 也许将来我会决定添加 you 会收到通知他们已被通知的功能添加到me 的friends 列表中。
【问题讨论】:
-
你不能“拦截”
me.friends.append(you)而Person.friends是一个普通的list,但你可以提供一个方法:def append_friend(self, friend): -
@jonrsharpe 我认为您的“香草列表”参考可能让我意识到我需要创建一个额外的课程,所以感谢您为我的想法提供种子。
标签: python list python-3.x properties