Skip to main content
 首页 » 编程设计

python之我可以创建一个在 python 中接收任意方法调用的对象吗

2025年05月04日37飞鱼

在 python 中,我可以创建一个在实例化时可以接收任意方法调用的类吗?我读过this却无法拼凑起来

我猜它与属性查找有关。对于类 Foo:

class Foo(object): 
  def bar(self, a): 
    print a 

类属性可以通过print Foo.__dict__得到,给出

{'__dict__': <attribute '__dict__' of 'Foo' objects>, '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__module__': '__main__', 'bar': <function bar at 0x7facd91dac80>, '__doc__': None} 

所以这段代码是有效的

foo = Foo() 
foo.bar("xxx") 

如果我调用 foo.someRandomMethod(),将导致 AttributeError: 'Foo' object has no attribute 'someRandomMethod'。

我希望 foo 对象接收任何随机调用并默认为无操作,即。

def func(): 
    pass 

我怎样才能做到这一点?我希望此行为模拟一个对象以进行测试。

请您参考如下方法:

来自 http://rosettacode.org/wiki/Respond_to_an_unknown_method_call#Python

class Example(object): 
    def foo(self): 
        print("this is foo") 
    def bar(self): 
        print("this is bar") 
    def __getattr__(self, name): 
        def method(*args): 
            print("tried to handle unknown method " + name) 
            if args: 
                print("it had arguments: " + str(args)) 
        return method 
 
example = Example() 
 
example.foo()        # prints “this is foo” 
example.bar()        # prints “this is bar” 
example.grill()      # prints “tried to handle unknown method grill” 
example.ding("dong") # prints “tried to handle unknown method ding” 
                     # prints “it had arguments: ('dong',)”