考虑以下示例:
class Foo(object):
def bar(self):
return "bar"
class Bar1(object):
def __init__(self):
self.foo = Foo()
def bar(self):
return self.foo.bar()
class Bar2(object):
def __init__(self):
self.bar = Foo().bar
Bar1().bar() == Bar2().bar()
您应该更喜欢Bar1和Bar2中的哪一个?替代方案的利弊是什么?
我要问的是,有一个实例只有一种方法,该方法用于另一实例。我应该明确说明它确实是一种“方法”(Bar1),还是应该保存一个函数调用和一些复杂性(Bar2)?
最佳答案
Bar2
显然是一种hack(可能会减少源长度,并可能减少调用开销)。我不会这样做。
原因:
①Bar2().bar
是Foo
的一种方法(这是令人惊讶的,因此没有好的样式)。您可以通过查看Bar2().bar.im_self
来自己检查。
②子类无法覆盖Bar2
的方法。您可以通过这种方式禁用类的重要功能。
③以后更改Bar
的foo将仅在Bar1
中具有预期的效果,而在Bar2
中,仍将使用指向原始foo
方法的指针。
关于python - 是否使用实例方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18847411/