是否有可能不发生覆盖?例如:
class A:
def __init__(self, name):
self.name = name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.name = name + "yes"
有什么办法可以self.name
B 类中的名称独立于 A 类中的名称,还是强制使用不同的名称?
用两个下划线作为名称前缀会导致名称修改,这似乎正是您想要的。例如
class A:
def __init__(self, name):
self.__name = name
def print_name(self):
print self.__name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.__name = name + "yes"
def print_name(self):
print self.__name
def print_super_name(self):
print self._A__name #class name mangled into attribute
在类定义中,您可以解决__name
通常(如print_name
方法)。在子类中以及类定义之外的任何其他地方,类的名称都会被插入到带有下划线的属性名称中。
b = B('so')
b._A__name = 'something'
b._B__name = 'something else'
在您发布的代码中,子类属性将覆盖超类的name
,这通常是您想要的。如果您希望它们分开,但具有相同的变量名称,请使用下划线
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)