有没有可能不会发生覆盖?例如:
class A:
def __init__(self, name):
self.name = name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.name = name + "yes"有没有办法让B类中的self.name独立于A类中的A,或者强制使用不同的名称?
发布于 2012-08-13 08:58:50
在名称前加上两个下划线会导致名称混乱,这似乎是您想要的结果。例如
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'在您发布的代码中,subclass属性将覆盖超类的name,这通常是您想要的。如果希望它们分开,但变量名相同,请使用下划线
https://stackoverflow.com/questions/11927055
复制相似问题