我正在编写有两个类的代码。一个类为三维环境创建文本元素。另一个会在那个环境中将它们组合在一起。我要做的是拥有第一类的第二类调用实例。换句话说,在def makeGroup
中,我希望能够调用class msg
的实例。编码将如何措辞?目前,第一个类继承到第二个,然后我试图调用self.text对象,但我不知道应该如何引用它。我不相信我正确使用继承。
class msg:
def __init__(self,num,unit):
self.message = str(num) + ' ' + unit
self.num = num
self.text = viz.addText(self.message)
class msgGroup(msg):
def __init__(self,x,y,z):
self.msgLs=[]
self.ghostMsg= viz.addText('',pos=[x,y,z],color= [0.000, .9, 0.071])
self.msgLs.append(self.ghostMsg)
def makeGroup(self):
msg.text.setPosition([0,(len(self.msgLs)-1)*-1.5,0], viz.REL_PARENT)
self.msgLs.append(msg.text)
答案 0 :(得分:2)
不,你确实误解了遗产。继承是因为当B类与A类共享所有相同的属性但有更多,可能更具体时:例如Man是一个人。
您的情况有所不同:您有一个小组,一个小组有消息。这是组合,而不是继承:“has-a”,而不是“is-a”。您只需在msgGroup
中定义message_list并向其添加消息,然后您就可以遍历消息并访问其text
属性。
答案 1 :(得分:2)
五件事:
msg
类应继承自object
msgGroup
继承自msg
,则每个msgGroup
实例还包含msg
实例的所有成员(数据,方法和更多奇特的内容)具有。在方法makeGroup
中,要引用当前实例的text
成员,只需执行self.text
。您可能希望每个msgGroup
都有多个msg
。要做到这一点,不要使用继承,只需让msgGroup
列出msg
,然后迭代它:
for msg in self.msg_list:
print msg.text
引用对象或类的成员不称为“调用它”。您可以使用()
运算符调用函数,方法和其他可调用项(如类)。
foo = self.makeGroup # assigning makeGroup to a variable
bar = self.makeGroup() # calling makeGroup, then assigning the result of that call to a variable