如何在 Python 中的同一个类对象的 2 个实例中触发一个方法?

戴夫·黄

我有 2 个同一个类(State)的实例(st0,st1),其中有 2 个方法。不知何故当st0loc_st()被调用,我想要那个st1rem_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

你知道如何在 python 中从同一个类中输入对象吗?

Python:如何在同一个类中获取类的创建实例?

如何在同一个类中的另一个 api 中调用 python api 方法?

Python - 如何在同一个文件中定义相互依赖的类?

如何在Python 2中定义一个类?

同一个 Python 对象中的实例变量如何看似同时引用不同的对象?

如何在搜索中显示同一个表格中的 2 个表格

如何在同一个ehCache中缓存2种不同的bean方法?

如何在同一个 docker 容器或 dyno 中运行 2 个进程?

如何在同一个字典中合并 2 个单独的键值对?

如何在同一个类的另一个方法中调用一个方法?

在同一个类中使用不同的函数时如何在Python中获取Checkbox的值

如何在Selenium Python中的同一个div中查找最后一个元素

如何在同一个OOP类中修改多个对象?

如何在 Python 3 的同一个键中附加多个值?

如何在Python中每次对同一个变量获取不同的随机数?

如何在同一个目录python中动态加载文件

你如何从同一个类中调用一个方法?

使用面向对象的方法对同一个类的实例进行python并发

如何从同一个表中获得2个带有ID参数的值

如何从同一个表中获取2个不同的数据列

如何在同一个类中的静态方法中引发异常

如何在同一个插件中处理2个OSGi声明式服务捆绑包组件?

Cake PHP 3.4 - 如何在同一个查询中添加 2 个内部连接?

如何在同一个li元素中处理2个嵌套循环而不重复

SQL:如何在同一个表中合并 2 个两列并删除之后未使用的列?

Spock Groovy-如何在同一个类中模拟方法?

如何在同一个基类的方法中获取所有属性?

如何在同一个类中调用接口方法?