所以,Python 很高兴我能写出这样的代码,
class A(): pass
a1 = A()
a2 = A()
a1.some_field = 5
a2.other_field = 7
现在,在将对象传递给方法时,我已经学会了停止担心并喜欢鸭子类型。而且我接受允许一个类的不同实例具有不同的字段有时会很方便。
我的问题是,我正在与一个由 4 名开发人员组成的团队构建一个中型 Web 应用程序,我不禁认为向对象添加任意字段会使推理应用程序状态变得更加困难。
我想我的问题是:向对象添加任意字段的做法只是鸭子类型的自然扩展,还是应该避免?
这是一个具体的例子:
class Visitor():
def __init__(self, name, address, dob):
self.name = name
self.address = address
self.dob = dob
def summarize_visits(visits):
self.most_recent_visit = find_most_recent_visit(visits)
在这种情况下,处理对象的代码必须意识到除非有人先前调用过同一个对象,否则会引发一个Visitor
事实。似乎它会导致很多块,不是吗?visitor.most_recent_visit
AttributeError
summarize_visits
if hasattr(...)