传递类实例时如何执行函数?

2024-03-28 23:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有一个TestClass可以调用。callable执行一个函数,如果任何属性等于None,该函数将引发异常。将其定义为可调用的目的是,当TestClass实例被传递给另一个函数或被复制时,它将在传递之前检查所有属性是否存在,否则将引发异常。你知道吗

下面显示这个逻辑的行是UsesTestClass(testClass())。你知道吗

理想情况下,我希望能够执行相同的检查,而不必“调用”类实例。例如,UsesTestClass(testClass)。有没有一种神奇的方法或其他方法来配置类,使其能够在作为参数传递之前执行函数?你知道吗

class TestClass:
    def __init__(self):
        self.name = None

    def run(self):
        if self.name is None:
            raise Exception("'name' attribute is 'None'")

    def __call__(self):
        self.run()
        return self

def UsesTestClass(testClass):
    print(testClass.name)

testClass = TestClass()
testClass.name = "Hello"
UsesTestClass(testClass())

Tags: 实例方法函数runnameselfnone属性
1条回答
网友
1楼 · 发布于 2024-03-28 23:15:33

如果您使用集成到python中的类型库,就可以做到这一点。你知道吗

import types


class TestClass:
    def __init__(self):
        self.name = None

    def __getattribute__(self, attr):
        method = object.__getattribute__(self, attr)
        if not method:
            raise Exception("Attribute %s not implemented" % attr)
        if type(method) == types.MethodType:
            self.run()
        return method

    def run(self):
        if self.name is None:
            raise Exception("'name' attribute is 'None'")

    def __call__(self):
        self.run()
        return self


def UsesTestClass(testClass):
    print(testClass.name)


testClass = TestClass()
testClass.name = "Hello"
UsesTestClass(testClass)

相关问题 更多 >