可以使用class inheritance這裏。繼承允許您基於另一個對象創建一個對象,並繼承它的所有功能和屬性。
在這種情況下,它看起來像:
class A(object):
def foo(self):
print "blah"
class B(A):
# You can add new methods or attributes here,
# or even overwrite those inherited from A if you
# really want to, though you have to be careful with that.
pass
該聲明後,
>>> B().foo()
"blah"
這樣做是因爲:
- 你創造
A
類,並創建了它方法foo
。
- 您創建
B
類從A
繼承,這意味着當A
「生下它,」 B
誕生與A
擁有一切。
- 在我們的案例中,
B
是A
的精確副本,因爲我們沒有做任何其他的事情。但是,我們可以進行更改或添加更多方法。
一個例子:
class A(object):
def foo(self):
print "blah"
class B(A):
def newfoo(self):
print "class A can't do this!"
,在使用中,我們會看到:
>>> A().foo()
blah
>>> B().foo()
blah
>>> A().newfoo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'newfoo'
>>> B().newfoo()
class A can't do this!
特別是,你的代碼上面沒有工作的原因是,當你試圖設置B.foo
時,你寫了
class B(object):
foo = A.foo
代替
class B(object):
foo = A().foo
當你寫A.foo
沒有()
,你是從的A
類型,它不會在Python工作直接詢問的方法。如果你要做foo = A().foo
,你會做的是實例化一個A
對象,然後獲取其方法foo
的副本,然後分配它。
如果'foo'是類方法而不是實例方法,這會更有意義。 – NullUserException