问题描述
我试图了解python中的多重继承。我认为是“ kinda”,但是我缺少了一些。我知道,如果我有两个方面,我可以做类似的事情:
class A():
def __init__(self,name):
self.name = name
class B(A):
def __init__(self,name):
A.__init__(self,name)
self.mm = False
self.name = name
b = B("Peter")
我的问题是当我有更多的类并且每个类都有自己的init参数时。乍一看,拥有这样的东西毫无意义:
class A():
def __init__(self,name,arg_a1,arg_a2):
self.name = name
class B(A):
def __init__(self,arg_b1,arg_b2,arg_a2...):
A.__init__(self,arg_a2...)
self.mm = False
self.name = name
class C(B):
def __init__(self,arg_c1,arg_c2,arg_a2.........):
B.__init__(self,arg_a2...)
self.name = name
因此,我开始研究如何以有效的方式进行操作,而不仅仅是硬编码。那就是我遇到多重继承的时候,那是我的疑虑开始引起人们的注意的时候。
如果我有3个班级:
class A():
def __init__(self,name):
self.name = name
class B(A):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.mm = False
self.name = name
class C(B):
def __init__(self,a,j,**kwargs)
self.a = a
self.j = j
c = C("p",1,5,name="p")
为什么这样会出错,但是不能将名称添加为init参数呢?
在另一个示例中,如果我向A初始化函数添加另一个参数,则会得到TypeError: __init__() got multiple values for argument 'name'
。
class A():
def __init__(self,lastname):
self.name = name
self.lastname = lastname
class B(A):
def __init__(self,**kwargs):
super().__init__(name,name="p")
所以,毕竟,我想到了几个问题。
- 为什么生成此
TypeError
? - 如何使继承“智能”?
- 我是否总是需要将
*args
和**kwargs
用于多重继承?
所有这些使我明白了我每天使用的库。大概其中一些使用了这个概念(我不知道,我假设)。当用户放置任何类中都没有的kwarg
时会发生什么情况? python如何“知道” name
进入class A
而不是class B
或相反?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)