我正在尝试在不同的类中使用相同的变量(列表)(这是我的代码的基本示例,但基本上是相同的功能,在Class1中获取列表然后在Class2中使用它):< / p>
class Class1:
def __init__(self):
self.dosomething():
def dosomething(self):
x = [99, 98]
return x
class Class2:
def __init__(self):
y = Class1()
print y
但是当我调用Class2而不是打印list [99, 98]
时,我会得到类似的结果:
<myfile.Class1 instance at 0xb74c59ac>
是否有可能分享如何做到这一点?我做错了,但我在文档中找不到。
答案 0 :(得分:2)
这是因为你还没有调用class1的“dosomething”方法。
实际上我错了,你有,你只需要称之为self.x而不是x
另外,你想调用y.x来访问数组,而不是x = ...你需要self.x =,它需要进入init。我会为你修改你的代码。
class Class1:
def __init__(self):
self.dosomething()
def dosomething(self):
self.x = [99, 98]
class Class2:
def __init__(self):
y = Class1()
print y.x
我实际上只是建议为class1执行此操作:
class Class1:
def __init__(self):
self.x = [99, 98]
和Class2:
class Class2:
def __init__(self):
self.y = Class1().x
答案 1 :(得分:1)
但是当我调用Class2而不是打印列表[99,98]时,我会得到这样的结果:
这实际上是你期望的。当您实例化Class1()
时,您正在分配y
并将其分配给Class2
。
现在,如果您运行以下代码:
class Class1:
def dosomething(self):
x = [99, 98]
return x
class Class2:
def __init__(self):
y = Class1()
print y.dosomething()
你会得到:
>>> Class2()
[99, 98]
作为输出。因为您正在设置Class1
,然后在dosomething()
上调用y
并打印结果。
但是,现在,您必须明白,Class2()
的构造函数执行完毕后,y
不再存在,以及x
。如果要保留值,则需要使用类的成员,如下所示:
class Class1:
def __init__(self):
self.x = [99, 98]
def get_x(self):
return self.x
class Class2:
def __init__(self):
self.y = Class1()
def get_x(self):
print self.y.get_x()
所以你可以这样做:
>>> z = Class2()
>>> print(z.get_x())
[99, 98]
>>> print(z.get_x())
[99, 98]
其中[99, 98]
是self.x
Class1
中包含的值。
我希望有些事情能够更加明确,现在是时候用Python打开一本关于OOP的书了,如果这就是你已经在做的事情,请阅读下一章! : - )
您必须了解面向对象编程中的类的全部要点是实际封装数据,通过行为公开它。所以当你说你想要从一个类到另一个类共享变量时,就会出现根本错误!这就是为什么我向你展示了一种方法来交换类之间变量引用的数据,而不是实际访问另一个类的成员。
我做错了什么但我在文档中找不到。
事情是,这完全取决于你真正想做的事情。并且不要告诉我你正在尝试共享变量等......这只是技术细节。真正的问题是你要解决的问题。