如果传递了类实例,如何执行函数?

我目前有一个TestClass可调用的。可调用对象执行一个函数,如果任何属性等于 ,则会引发异常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())


PIPIONE
浏览 205回答 1
1回答

慕运维8079593

如果您使用集成到 python 中的类型库,您可以执行此操作。import typesclass 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 selfdef UsesTestClass(testClass):    print(testClass.name)testClass = TestClass()testClass.name = "Hello"UsesTestClass(testClass)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python