起初,因爲PEP8 Style Guide說,「類名通常應使用CapWords約定」。所以你應該重新命名你的課程爲Foo
和Bar
。
你的任務可以通過使用object.__dict__
和你的子類(Bar
)
class Foo:
def __init__(self, id, name):
self.id = id
self.name = name
class Bar(Foo):
def __init__(self, *args, **kwargs):
# Here we override the constructor method
# and pass all the arguments to the parent __init__()
super().__init__(*args, **kwargs)
new = Foo(id='1',name='Rishabh')
x = Bar(**new.__dict__)
# new.__dict__() returns a dictionary
# with the Foo's object instance properties:
# {'id': '1', 'name': 'Rishabh'}
# Then you pass this dictionary as
# **new.__dict__
# in order to resolve this dictionary into keyword arguments
# for the Bar __init__ method
print(x.name) # Rishabh
重寫__init__
方法來完成但是,這不是一個做事的傳統方式。如果你想有一個實例,這是另一個實例的副本,你應該使用copy
模塊,不要做這個矯枉過正。
你試過導入副本,然後x = copy.copy(新) – barny
HI班尼謝謝你的回覆。我剛剛在您的建議後嘗試複製。但我仍然想知道是否有任何允許繼承該對象作爲參數的功能。 – reevkandari
你所描述的「繼承」不是面向對象意義上的繼承,事實上它更像複製。 – barny