Python 超级类和基类应该具有相同属性名称的不同实例
我是python新手,我正在尝试学习基本继承,我希望超级类和基类具有相同名称的属性,但它们应该具有不同的实例。下面是我为试验这个想法而编写的代码Python 超级类和基类应该具有相同属性名称的不同实例,python,Python,我是python新手,我正在尝试学习基本继承,我希望超级类和基类具有相同名称的属性,但它们应该具有不同的实例。下面是我为试验这个想法而编写的代码 class master(object): def __init__(self, name): self.name = name def print_name(self): print (self.name) class slave(master): def __init__(self,
class master(object):
def __init__(self, name):
self.name = name
def print_name(self):
print (self.name)
class slave(master):
def __init__(self, master_name, slave_name):
self.name = slave_name
super(slave, self).__init__(master_name)
def print_name(self):
super(slave, self).print_name()
print (self.name)
def main():
obj = slave('hello', 'world')
obj.print_name()
if __name__ == '__main__':
main()
我得到的结果是:
你好
你好
但我希望输出是
世界
你好来自
master
的初始化
正在覆盖您在slave
中设置的self.name
的值。您需要使用不同的变量名。超级类和基类是同一事物的不同名称,在本例中是主类。这是slave
的基类以及它的超类
您可以在类上使用相同名称的属性,但在实例obj
上不能使用相同名称的属性,该实例同时是master
和slave
的实例。因此,在这两种方法中,self
与master.print\u name()
和slave.print\u name()
都指向同一个对象
对象上的属性在给定时间只能指定一个值,因此需要不同的名称。但是,您可以通过在后台对具有两个前导下划线的属性进行名称损坏来获得相同名称的外观:
class Master(object):
def __init__(self, name):
self.__name = name
def print_name(self):
print self.__name
class Slave(Master):
def __init__(self, master_name, slave_name):
self.__name = slave_name
Master.__init__(self, master_name)
def print_name(self):
Master.print_name(self)
print self.__name
def main():
obj = Slave('hello', 'world')
obj.print_name()
# The *actual* names of the attributes:
print obj._Master__name, obj._Slave__name
if __name__ == '__main__':
main()