为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2021-11-23 19:23:04
我目前有一个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 selfdef UsesTestClass(testClass):    print(testClass.name)testClass = TestClass()testClass.name = "Hello"UsesTestClass(testClass())
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

如果您使用集成到 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)


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号