![](/img/trans.png)
[英]Python — using __init__ with an inherited method for polynomials class
[英]python __init__ method in inherited class
我想為子類提供一些額外的屬性,而不必顯式調用新方法。 那么有沒有辦法給繼承的類一個__init__
類型的方法,它不會覆蓋父類的__init__
方法?
我編寫下面的代碼純粹是為了說明我的問題(因此屬性命名不當等)。
class initialclass():
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
class inheritedclass(initialclass):
def __new__(self):
self.attr3 = 'three'
def somemethod(self):
print 'the method'
a = inheritedclass()
for each in a.__dict__:
print each
#I would like the output to be:
attr1
attr2
attr3
謝謝
據我所知這是不可能的,但是您可以調用超類的 init 方法,如下所示:
class inheritedclass(initialclass):
def __init__(self):
initialclass.__init__(self)
self.attr3 = 'three'
只需使用super
調用父母的__init__
:
class inheritedclass(initialclass):
def __new__(self):
self.attr3 = 'three'
super(initialclass, self).__init__()
我強烈建議遵循 Python 的命名約定並以大寫字母開頭一個類,例如InheritedClass
和InitialClass
。 這有助於快速區分類與方法和變量。
首先,您正在混合__init__
和__new__
,它們是不同的東西。 __new__
不接受實例( self
)作為參數,它接受類( cls
)。 至於你的問題的主要部分,你需要做的是使用super
來調用超類' __init__
。
您的代碼應如下所示:
class initialclass(object):
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
class inheritedclass(initialclass):
def __init__(self):
self.attr3 = 'three'
super(inheritedclass, self).__init__()
這非常簡單。 定義一個新的__init__
方法並在開始時調用父級的__init__
。
# assuming a class Base, its __init__ takes one parameter x
class Derived(Base):
def __init__(self, x, y):
# whatever initialization is needed so we can say Derived is-a Base
super(Derived, self).__init__(x)
# now, add whatever makes Derived special - do your own initialization
self.y = y
在 Python 3 中,您不必(因此為了簡單起見可能不應該)顯式繼承object
或將 class 和self
傳遞給super
。
只需從父級的 init 調用指定的方法(如果存在):
class initialclass():
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
if hasattr(self, 'init_subclass'):
self.init_subclass()
class inheritedclass(initialclass):
def init_subclass(self):
self.attr3 = 'three'
class initialclass:
def __init__(self):
self.attr1 = 'one'
self.attr2 = 'two'
class inheritedclass(initialclass):
def __init__(self):
super().__init__()
self.attr3 = 'three'
def somemethod(self):
print (self.attr1, self.attr2, self.attr3)
a=inheritedclass()
a.somemethod()
1. List item
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.