现在我需要一个属性,在另一个类中可以在一个类中执行某些操作。
就像:
a.py
class A:
def __init__(self, io_loop): # the same io_loop instance
self.access = None
self.w_id = None
self.io_loop = io_loop
@gen.coroutine
def setup(self):
# `async_client` has the `get`, 'post', 'put', 'delete' methods
self.access = yield async_client()
@gen.coroutine
def do_something(self):
self.w_id = self.access.get('w_id')
...
def run(self):
self.io_loop.run_sync(self.setup)
self.io_loop.spawn_callback(self.do_something)
self.io_loop.start()
if __name__ == '__main__':
a = A()
a.run()
-
b.py
class B:
def __init__(self, io_loop):
self.w_id = None
self.io_loop = io_loop # the same io_loop instance
# How can i get the w_id from `class A`
def run(self):
...
if __name__ == '__main__':
b = B()
b.run()
通知:
当class B
的zone_id不是None时,class B
可以执行下一步操作。这意味着,如果class A
zone_id为无,class B
将等待它。
而class A
和class B
只能初始化一个实例。
不同文件中的class A
和class B
。
答案 0 :(得分:0)
在创建初始化实例之前,无法访问该变量。否则,w_id
中不存在A
。
如果要为其他类提供w_id
任意值,请将其作为类变量,意味着直接在类w_id = 'some value'
内编写A
,并使用相同的缩进作为def
s:
class A:
w_id = something
def __init__(self):
...
class B:
def __init__(self):
self.w_id = A.w_id
否则,您需要一个A
的实例,如下所示:
class B:
def __init__(self):
a = A()
a.do_something()
self.w_id = a.w_id
唯一的另一个选择是在B
:
class B:
...
@gen.coroutine
def setup(self):
# `async_client` has the `get`, 'post', 'put', 'delete' methods
self.access = yield async_client()
@gen.coroutine
def do_something(self):
self.w_id = self.access.get('w_id')
...
正如您所提到的,io_loop在所有类中都是相同的实例,如果您的函数使用它,您可能需要创建它的副本。您无法更改变量并期望它保持不变。