擅长:python、mysql、java
<p>我觉得你做事有点特别。如果不是第一个方法,您仍然应该将<code>__init__</code>放高。可读性是关键,并且<code>__init__</code>显示您期望的主实例字段。在</p>
<p>这里有三种选择。我更喜欢第一种方法,因为它记录了默认方法,并且需要对代码进行最少的修改。最后一种方法可行,但对于任何需要维护代码的人来说,这可能会令人困惑。在</p>
<pre><code>class A(object):
def __init__(self, method="foo"):
if callable(method):
method(self)
else:
getattr(self, method)()
def foo(self):
print "something"
class B(object):
def __init__(self, method = None):
if method is None:
self.defaultMethod()
else:
method(self)
def defaultMethod(self):
print "foo"
def _defaultMethod(self):
print self.x
class C(object):
def __init__(self, method = _defaultMethod):
self.x = "bleh"
method(self)
def anotherMethod(self):
print "doing something else"
def defaultMethodProxy(self):
_defaultMethod(self)
</code></pre>