超类和基类应具有相同属性名的不同实例

时间:2017-06-08 13:42:19

标签: 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, 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()

我得到的输出是: 你好 喂

但我想要输出 世界 喂

2 个答案:

答案 0 :(得分:1)

超类和基类是同一个东西的不同名称,在本例中是101|abc|this is desc|2017 102|xyz|"thie is a long desc/ des for xyz continue here."|2017 103|bbb|"this is is another long desc/ and it stop here"|2017 类。这是master及其超类的基类。

您可以在上拥有一个具有相同名称的属性,但不能在 实例slave上拥有该属性,该实例是{{1} }和obj在同一时间。因此,masterslave方法中的self指的是同一个对象。

对象上的属性只能在给定时间分配一个值,因此您需要不同的名称。但是你可以得到同名的外观,名称为mangling,在幕后为具有两个前导下划线的属性完成:

master.print_name()

答案 1 :(得分:0)

__init__中的master覆盖了您在self.name中设置的slave的值。您需要使用不同的变量名称。

相关问题