Return 一种设置 属性 的 class 的方法

Return a way to set a property of a class

所以我有以下功能:

class Test:
    def __init__(self):
        self.test = False

def test():
    test = Test()
    # And now return some way to set the test.test property

所以我希望 test 函数能够 return 以某种方式设置 test.test

我尝试了以下操作:

def test():
    test = Test()
    return test.test

property = test()
property = True
# Doesn't work, doesn't pass a reference

或者什么可行(但是)

def test():
    test = Test()
    def set(to):
        test.test = to
    return set

fnc = test()
# But how do i execute it then

当然,也可以只 return“测试”对象,但我不希望那样,因为那样也可以更改测试对象的其他属性

你可以这样做:

class Test:
   def __init__(self):
       self.test = False

   def change_test_value(self,value):
        self.test=value

def test():
   test = Test()
   test.change_test_value(True)
class Test:
    def __init__(self):
        self.test = False

def test():
    test = Test()
    def set_test(val: bool):
        test.test = val
    return set_test

test()(True)  # test.test is now True... somewhere!

请注意,此问题存在一个问题,即虽然您有一个可以更改 test.test 的函数,但实际上您无权访问 test 对象以查看它是否有效。

如果要使 test.test 值可访问而不使封闭的 test 对象可访问,您可以 return 一个 getter 以及一个 setter:

from typing import Callable, Tuple


class Test:
    def __init__(self):
        self.test = False


def test() -> Tuple[Callable[[], bool], Callable[[bool], None]]:
    test = Test()

    def get_test() -> bool:
        return test.test

    def set_test(val: bool) -> None:
        test.test = val

    return get_test, set_test


get_test, set_test = test()
print(get_test())  # False
set_test(True)
print(get_test())  # True