我是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()
我得到的输出是: 你好 喂
但我想要输出 世界 喂
答案 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
在同一时间。因此,master
和slave
方法中的self
指的是同一个对象。
对象上的属性只能在给定时间分配一个值,因此您需要不同的名称。但是你可以得到同名的外观,名称为mangling,在幕后为具有两个前导下划线的属性完成:
master.print_name()
答案 1 :(得分:0)
__init__
中的master
覆盖了您在self.name
中设置的slave
的值。您需要使用不同的变量名称。