考虑以下示例:

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().barFoo的一种方法(这是令人惊讶的,因此没有好的样式)。您可以通过查看Bar2().bar.im_self来自己检查。

②子类无法覆盖Bar2的方法。您可以通过这种方式禁用类的重要功能。

③以后更改Bar的foo将仅在Bar1中具有预期的效果,而在Bar2中,仍将使用指向原始foo方法的指针。

关于python - 是否使用实例方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18847411/

10-11 11:27