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,

我是python新手,我正在尝试学习基本继承,我希望超级类和基类具有相同名称的属性,但它们应该具有不同的实例。下面是我为试验这个想法而编写的代码

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()