【发布时间】:2019-03-06 21:46:59
【问题描述】:
我不确定是否有人问过这个问题,因为我看不到任何类似的问题。
以下是我的问题:
class Parent(object):
def __init__(self,**kwargs):
self.name = kwargs.get('name',None)
self.age = kwargs.get('age',None)
self.year = '1995'
print(self.name,self.age,self.year)
class Child(Parent):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.parent_name = self.name
self.parent_age = self.age
self.parent_year = self.year
print("Parent Details: ",self.parent_name,self.parent_age,self.parent_year)
>>> res = Parent(name='Derek',age=22)
Derek 22 1994
>>> res2 = Child()
None None 1994
我的问题是,为什么子类返回 None?我已经使用 super() 来继承父 init 类。以下是我的期望,我该如何实现?
>>> res = Parent(name='Derek',age=22)
Derek 22 1994
>>> res2 = Child()
Parent Details: Derek 22 1994
【问题讨论】:
-
您的期望很奇怪/很糟糕。
Child()是在没有任何名称和年龄的情况下创建的,它为什么要重复使用来自其他不相关实例的数据? -
您在创建
Child的实例时没有传递姓名或年龄,因此该实例自然没有姓名或年龄。 -
假设您有两个对象
p1 = Parent(name="Derek", age=22)和p2 = Parent(name="Donna", age=21)。您希望Child()继承哪些值?继承适用于 class 层次结构中的名称查找,而不适用于这些类的各个 instances 之间的关系。 -
你现在应该避免使用
**kwargs。它似乎使您无法理解正在发生的事情。 -
我无法确定,但在我看来,您似乎在混淆类和类的实例。这是非常不同的事情。
标签: python python-3.x class inheritance