我有 2 个同一个类(State)的实例(st0,st1),其中有 2 个方法。不知何故当st0。loc_st()被调用,我想要那个st1。rem_st()被自动触发。如何使用 Python OOP 实现该目的?对不起,代码看起来有点幼稚,但它是一个简化的模型,节省了阅读工作。
import random
class State(object):
def __init__(self) -> None:
self.s = ['S0', 'S1', 'S2']
def loc_sc(self):
# how to trigger a remote method in different class?
print (self.s)
def rem_sc(self):
random.shuffle(self.s)
print (self.s)
if __name__ == '__main__':
st0 = State()
st1 = State()
# how can I trigger st1.rem_sc() automatically
# when st0.loc_sc is called
st0.loc_sc()
如果您希望调用每个实例的方法,您只需向类中添加一个列表并遍历所有实例并调用它们的方法:
import random
class State(object):
instances = []
def __init__(self) -> None:
self.in_trigger = 0
self.ex_trigger = 0
self.s = ['S0', 'S1', 'S2']
State.instances.append(self)
def loc_sc(self):
# how to trigger a remote method in different class?
print (self.s)
for i in State.instances:
i.rem_sc()
def rem_sc(self):
if self.ex_trigger:
random.shuffle(self.s)
print (self.s)
if __name__ == '__main__':
st0 = State()
st1 = State()
st0.loc_sc()
或者您可以将实例数组添加到类构造函数中。当在实例上调用该方法时,您可以遍历该数组中的所有实例并调用该方法:
import random
class State(object):
def __init__(self, instances=[]) -> None:
self.in_trigger = 0
self.ex_trigger = 0
self.s = ['S0', 'S1', 'S2']
self.instances = instances
def loc_sc(self):
# how to trigger a remote method in different class?
print(self.s)
for i in self.instances:
i.rem_sc()
def rem_sc(self):
if self.ex_trigger:
random.shuffle(self.s)
print (self.s)
if __name__ == '__main__':
st1 = State()
st0 = State([st1])
st0.loc_sc()
如果您想先初始化 st0,您可以向该类添加一个 addInstance 方法,该方法会将一个实例添加到该实例的实例数组中:
import random
class State(object):
def __init__(self, instances=[]) -> None:
self.in_trigger = 0
self.ex_trigger = 0
self.s = ['S0', 'S1', 'S2']
self.instances = instances
def loc_sc(self):
# how to trigger a remote method in different class?
print(self.s)
for i in self.instances:
i.rem_sc()
def rem_sc(self):
if self.ex_trigger:
random.shuffle(self.s)
print (self.s)
def addInstance(self, instance):
self.instances.append(instance)
if __name__ == '__main__':
st0 = State()
st1 = State()
st0.addInstance(st1)
st0.loc_sc()
或者您也可以添加对构造函数的引用,以便将实例本身添加到该引用的实例中。
import random
class State(object):
def __init__(self, reference=None) -> None:
self.in_trigger = 0
self.ex_trigger = 0
self.s = ['S0', 'S1', 'S2']
self.instances = []
if reference != None: reference.instances.append(self)
def loc_sc(self):
# how to trigger a remote method in different class?
print(self.s)
for i in self.instances:
i.rem_sc()
def rem_sc(self):
if self.ex_trigger:
random.shuffle(self.s)
print (self.s)
if __name__ == '__main__':
st0 = State()
st1 = State(st0)
st0.loc_sc()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句