考虑以下示例:
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)?你知道吗
您应该尽量不要向用户公开
Bar
的实现。为什么他会关心它是否调用某个内部类的方法?重要的是外部API调用的行为。你知道吗如果将其作为一种方法,则意味着:
两者似乎都不适用于您的情况(当然,您有更多的信息,因为您实际上知道
bar()
做什么,以及它的行为在未来可能如何变化)。你知道吗Bar2
显然是一种黑客攻击(可能是为了减少源代码长度,也可能是为了减少调用开销)。我不会这么做的。你知道吗原因:
①
Bar2().bar
是一种Foo
的方法(这是令人惊讶的,因此没有好的风格)。您可以通过查看Bar2().bar.im_self
来检查这一点。你知道吗②对于子类,重写
Bar2
的方法是不可能的。这样就禁用了类的一个有价值的特性。你知道吗③以后更改
Bar
的foo只会在Bar1
中产生预期的效果,而在Bar2
中,指向原始foo
方法的指针仍将被使用。你知道吗相关问题 更多 >
编程相关推荐