Python 引用另一个类中的类实例
我正在编写有两个类的代码。one类为三维环境创建文本元素。另一个将在该环境中将它们组合在一起。我要做的是让第二个类调用第一个类的实例。换句话说,在Python 引用另一个类中的类实例,python,Python,我正在编写有两个类的代码。one类为三维环境创建文本元素。另一个将在该环境中将它们组合在一起。我要做的是让第二个类调用第一个类的实例。换句话说,在defmakegroup中,我希望能够调用类msg的实例。编码将如何表达?目前,第一个类被继承到第二个类中,然后我尝试调用对象self.text,但我不知道应该如何引用它。我认为我没有正确地使用继承 class msg: def __init__(self,num,unit): self.message = str(num) +
defmakegroup
中,我希望能够调用类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)
不,你确实误解了继承。继承是指当B类与A类共享所有相同的财产,但有更多,也许更具体的财产时:例如一个人就是一个人 您的案例不同:您有一个组,一个组有消息。这是组合,而不是继承:“has-a”,而不是“is-a”。您只需在
msgGroup
中定义一个消息列表,并向其中添加消息,然后您就可以遍历消息并访问其文本属性。五件事:
如果这是Python2,那么您的msg
类应该继承自对象
:如果您不遵循此操作,则没有人能够遵循您的代码
如果msgGroup
继承自msg
,则每个msgGroup
实例还具有msg
实例所具有的所有成员(数据、方法和更奇特的东西)。在方法makeGroup
中,要引用当前实例的text
成员,只需执行self.text
您可能希望每个msgGroup
都有几个msg
s。要做到这一点,不要使用继承,只要让msgGroup
有一个msg
s的列表,然后迭代它:
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
你有问题吗?你有什么问题?看到了吗?如果我把msg
s列成一个列表,那不也是类msg
的一部分吗?除了在函数末尾添加类似于list.append(self.text)
的内容外,还有其他方法来创建该列表吗?没有,msg
s的列表将位于msgGroup
类的实例中。如果您已经收集了所需的所有数据,或者可以随时获取这些数据,那么还有其他方法可以创建并向列表中添加元素,例如msg_list+=[无论什么]
,或者使用通常称为列表理解的方法,即在一条语句中创建列表的代码。@martineau中有关于它们的更多信息,msgGroup
实例如果不使用其他数据结构,如何保存msgs
?您可以在自己的答案中滚动自己的链接列表-在这个答案中,高级集合使用内置集合。@user1496630否,msg
s列表不会神奇地成为msg
类的一部分。@Marcin抱歉,我的措辞太差了。我想问的是,如果我在msgGroup
中列出一个列表,我怎么能告诉它从另一个类添加一个对象?我可以说一些“从类msg的这个实例附加这个对象”吗?