引用另一个类中的类实例

时间:2012-07-20 17:49:49

标签: python

我正在编写有两个类的代码。一个类为三维环境创建文本元素。另一个会在那个环境中将它们组合在一起。我要做的是拥有第一类的第二类调用实例。换句话说,在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)

2 个答案:

答案 0 :(得分:2)

不,你确实误解了遗产。继承是因为当B类与A类共享所有相同的属性但有更多,可能更具体时:例如Man是一个人。

您的情况有所不同:您有一个小组,一个小组有消息。这是组合,而不是继承:“has-a”,而不是“is-a”。您只需在msgGroup中定义message_list并向其添加消息,然后您就可以遍历消息并访问其text属性。

答案 1 :(得分:2)

五件事:

  1. 如果这是Python 2,则您的msg类应继承自object
  2. PEP8:如果您不遵循此规定,则任何人都无法关注您的代码
  3. 如果msgGroup继承自msg,则每个msgGroup实例还包含msg实例的所有成员(数据,方法和更多奇特的内容)具有。在方法makeGroup中,要引用当前实例的text成员,只需执行self.text
  4. 您可能希望每个msgGroup都有多个msg。要做到这一点,不要使用继承,只需让msgGroup列出msg,然后迭代它:

    for msg in self.msg_list:
        print msg.text
    
  5. 引用对象或类的成员不称为“调用它”。您可以使用()运算符调用函数,方法和其他可调用项(如类)。

    foo = self.makeGroup # assigning makeGroup to a variable
    bar = self.makeGroup() # calling makeGroup, then assigning the result of that call to a variable