考虑以下示例:
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
的方法。您可以通过这种方式禁用类的一项有值(value)的功能。
③ 稍后更改 Bar
的 foo 只会在 Bar1
中产生预期的效果,而在 Bar2
中则会产生指向 foo 方法的指针原来的 foo
仍将使用。
关于python - 是否有实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18847411/