如何在类之间传递值-Python

时间:2019-07-01 22:49:43

标签: python class

我试图将值从类中的一个函数传递给类中的另一个函数。下面是我要实现的一些简化代码。

class test:
    def __init__(self):
        self.differentvalue = 0
    def set(self, value):
        print(value)
        self.differentvalue = value #this is not the same value as defined above - i.e. this is a new variable created in foo class i believe

class foo:
    def __init__(self):
        test.set(self, 5)

if __name__ == '__main__':
    foo()

我不想叫__init__,所以test().set(5)是不可行的。

干杯, 肖恩

2 个答案:

答案 0 :(得分:0)

您有两个选择

选项1,如果您需要为每个Test实例的differtvalue保留不同的上下文,则为最佳选择

class Test:

    def __init__(self):
        self.differentvalue = 0

    def set(self, value):
        self.differentvalue = value

class foo:
    def __init__(self):
        test = Test()
        test.set(5)

选项2,如果需要在所有测试类中保持不同值的最新值,则为最佳选择

class Test:

    __DIFFERENTVALUE = 0

    def __init__(self):
        pass

    @staticmethod
    def set(value):
        Test.__DIFFERENTVALUE = value

class foo:
    def __init__(self):
        Test.set(5)

答案 1 :(得分:0)

您可以定义一个值为None的类变量,然后在第一次调用setter时为其分配一个值。进一步调用设置器将不会更改该值。

在以下示例中,__init__中不需要Test方法。

class Test:

    differentvalue = None

    @classmethod
    def set(cls, value):
        if value is not None and Test.differentvalue is None:
            Test.differentvalue = value

class foo:
    def __init__(self):
        Test.set(5)

if __name__ == '__main__':
    foo()
    print(Test.differentvalue)
    Test.set(12)
    print(Test.differentvalue)

输出:

5
5   # the value did not change