引用另一个类中的类实例

2024-04-24 05:02:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 实例textselfmessage环境initdefunit
2条回答

五件事:

  1. 如果这是python2,msg类应该继承自object
  2. PEP8:如果你不遵循这一点,没有人能够遵循你的代码
  3. 如果msgGroupmsg继承,那么每个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
    

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

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

相关问题 更多 >