-2

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

2 回答 2

2

不,你确实误解了继承。继承适用于当类 B 与类 A 共享所有相同属性但具有更多,也许更具体的属性时:例如,人是人。

你的情况不同:你有一个组,一个组有消息。这是组合,而不是继承:“has-a”,而不是“is-a”。您应该简单地在内部定义一个 message_listmsgGroup并向其中添加消息,然后您可以遍历消息并访问它们的text属性。

于 2012-07-20T18:08:27.393 回答
2

五件事:

  1. 如果这是 Python 2,你的msg类应该继承自object
  2. PEP8:如果你不遵循这个,没有人将能够遵循你的代码
  3. 如果msgGroup继承自msg,那么每个msgGroup实例还具有实例所具有的所有成员(数据、方法和更奇特的东西)msg。在您的方法makeGroup中,要引用当前实例的text成员,只需执行self.text.
  4. 您可能希望每个msgGroup都有几个msgs。为此,不要使用继承,只需拥有msgGroup一个 s 列表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
    
于 2012-07-20T18:12:55.433 回答