如何将实例方法列表分配给类变量?

问题描述 投票:0回答:1

我有这门课:

class Point:
    def __init__(self):
        self.checks = [self.check1, self.check2]

    def check1(self):
        return True

    def check2(self):
        return True

    def run_all_checks(self):
        for check in self.checks:
            check()

实例变量

checks
不特定于实例,所以我想将它移动到类级别,这是我的尝试:

class Point:

    def __new__(cls, *args, **kwargs):
        cls.checks = [cls.check1, cls.check2]
        return super(Point, cls).__new__(cls, *args, **kwargs)

    def check1(self):
        return True

    def check2(self):
        return True

    def run_all_checks(self):
        for check in self.checks:
            check()

类定义

seems
工作(在没有
syntax
错误的意义上),但是当我运行它时,出现错误:

TypeError: Point.check1() missing 1 required positional argument: 'self'
python class variables instance
1个回答
4
投票

只需在类主体中执行,然后在

run_all_checks
中,确保显式传递实例,因为它们只是函数,而不是绑定方法(在通过和实例访问方法时创建):

class Point: def check1(self): return True def check2(self): return False checks = [check1, check2] def run_all_checks(self): for check in self.checks: print(check(self)) point = Point() point.run_all_checks()
注意,这在继承的情况下表现不同。但这可能没问题,具体取决于您的用例。

可以做像checks = ['check1', 'check2']

这样的事情,然后在
run_all_checks
,像
getattr(self, check)()
,但是IMO,这更脆弱。因此,如果我打算在子类中覆盖这些方法,那么在这种情况下我会采用您原来的方法。

© www.soinside.com 2019 - 2024. All rights reserved.