Python类继承问题
当我尝试这样做时,我得到了一个错误Python类继承问题,python,Python,当我尝试这样做时,我得到了一个错误NameError:global name'name'未定义是否有一个简单的解决方法 class C(object): def __init__(self, name): self.name = name class D(C): def __init__(self): C.__init__(self, name) obj1 = D() 在类D中,当您从C初始化它时,您没有向C的初始化传
NameError:global name'name'未定义
是否有一个简单的解决方法
class C(object):
def __init__(self, name):
self.name = name
class D(C):
def __init__(self):
C.__init__(self, name)
obj1 = D()
在类
D
中,当您从C
初始化它时,您没有向C
的初始化传递值,因此当它试图传递该值时会引发名称错误。您需要允许D
获取值name
,然后将其传递给C
C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
定义初始化(self,name):
C.uuu init_uuu(self,name)#在初始化D时必须传递name。
或者在D
中为name
定义默认值
C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
def uuu init uuu(self,name='Monty Python'):
C.uu init_uu(self,name)#仅允许您在需要时传递名称。
在类D
中,当您从C
初始化它时,您没有将值传递给C
的初始化,因此它在尝试传递时会引发名称错误。您需要允许D
获取值name
,然后将其传递给C
C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
定义初始化(self,name):
C.uuu init_uuu(self,name)#在初始化D时必须传递name。
或者在D
中为name
定义默认值
C类(对象):
定义初始化(self,name):
self.name=名称
D(C)类:
def uuu init uuu(self,name='Monty Python'):
C.uu init_uu(self,name)#仅允许您在需要时传递名称。
在此处使用,而不是使用父类名称,以便以后如果需要,可以启用诸如mixin、接口、抽象类等功能
然后还可以允许在子类中使用父类中的那些关键字参数,如下所示:
class D(C):
def __init__(self,**kwargs):
super(D,self).__init__(**kwargs)
用法示例:
In [349]: obj1 = D(name='test')
In [350]: obj1.name
Out[350]: 'test'
不要在这里使用父类名称,这样以后如果需要,可以启用诸如mixin、接口、抽象类等 然后还可以允许在子类中使用父类中的那些关键字参数,如下所示:
class D(C):
def __init__(self,**kwargs):
super(D,self).__init__(**kwargs)
用法示例:
In [349]: obj1 = D(name='test')
In [350]: obj1.name
Out[350]: 'test'
永远不要硬编码您继承的方法,而不是这样做super(),如果您想更改方法,只需更改类名即可 在python3中,不需要为super()指定参数
class C(object):
def __init__(self, name):
self.name = name
class D(C):
def __init__(self, name):
super().__init__(self, name)
永远不要硬编码您继承的方法,而不是这样做super(),如果您想更改方法,只需更改类名即可 在python3中,不需要为super()指定参数
class C(object):
def __init__(self, name):
self.name = name
class D(C):
def __init__(self, name):
super().__init__(self, name)
嗨,欢迎来到SO!这看起来像是家庭作业。如果需要,请阅读并回答您的问题。
C.\uuu init\uuuu(self,name)
hi,欢迎来到SO!这看起来像是家庭作业。如果需要,请阅读并回答您的问题。C.\uuuu init\uuuuu(self,name)
您不必为super()提供参数,默认情况下它将接受类。我理解这一点。我这样做是为了让学习该语言的人更清楚。默认情况下,你不必为super()提供参数,它将接受类。我理解这一点。我这样做是为了让学这门语言的人更清楚。