[英]correct way of extending a class in python
我得到了一個A
型對象的指定工廠。 我想制作一個新版本的A
型對象,它也具有Mixin
class 中的方法。 由於這里解釋太長的原因,我不能使用class A(Mixin)
,我必須使用A_factory
。 下面我試着舉一個簡單的例子。
我天真地認為從Mixin
繼承來賦予A
類型的對象以 mixin 方法就足夠了,但是下面的嘗試不起作用:
class A: pass
class A_factory:
def __new__(self):
return A()
class Mixin:
def method(self):
print('aha!')
class A_v2(Mixin): # attempt 1
def __new__(cls):
return A_factory()
class A_v3(Mixin): # attempt 2
def __new__(cls):
self = A_factory()
super().__init__(self)
return self
事實上A_v2().method()
和A_v3().method()
引發AttributeError: 'A' object has no attribute 'method'
。
在class A_vn(Mixin)
中使用A_factory
的正確方法是什么,以便工廠創建的A
類型對象繼承 mixin 方法?
沒有明顯的理由為什么你需要__new__
來展示你在這里展示的東西。 關於這個主題有一個很好的討論: 為什么 __init__() 總是在 __new__() 之后調用?
如果您嘗試以下操作,它應該可以工作:
class Mixin:
def method(self):
print('aha!')
class A(Mixin):
def __init__(self):
super().__init__()
test = A()
test.method()
如果您需要使用工廠方法,它應該是 function 而不是 class。 這里有一個關於如何使用工廠方法的很好的討論: https://realpython.com/factory-method-python/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.