Python:使用给定的参数集调用对象的所有方法

发布于 2024-10-06 09:10:08 字数 390 浏览 1 评论 0原文

我想使用给定的参数集调用 python 对象实例的所有方法,即对于像

class Test():
    def a(input):
        print "a: " + input
    def b(input):
        print "b: " + input
    def c(input):
        print "c: " + input

我想编写一个动态方法这样的对象,允许我

myMethod('test')

来运行结果

a: test
b: test
c: test

通过迭代所有 test() 方法 。预先感谢您的帮助!

I'd like to call all methods of a python object instance with a given set of arguments, i.e. for an object like

class Test():
    def a(input):
        print "a: " + input
    def b(input):
        print "b: " + input
    def c(input):
        print "c: " + input

I would like to write a dynamic method allowing me to run

myMethod('test')

resulting in

a: test
b: test
c: test

by iterating over all test()-methods. Thanks in advance for your help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星星的轨迹 2024-10-13 09:10:08

不太确定你为什么要这样做。通常在像unittest这样的东西中,您会在类上提供输入,然后在每个测试方法中引用它。

使用检查和目录。

from inspect import ismethod

def call_all(obj, *args, **kwargs):
    for name in dir(obj):
        attribute = getattr(obj, name)
        if ismethod(attribute):
            attribute(*args, **kwargs)

class Test():
    def a(self, input):
        print "a: " + input
    def b(self, input):
        print "b: " + input
    def c(self, input):
        print "c: " + input

call_all(Test(), 'my input')

输出:

a: my input
b: my input
c: my input

Not exactly sure why you want to do this. Normally in something like unittest you would provide an input on your class then reference it inside each test method.

Using inspect and dir.

from inspect import ismethod

def call_all(obj, *args, **kwargs):
    for name in dir(obj):
        attribute = getattr(obj, name)
        if ismethod(attribute):
            attribute(*args, **kwargs)

class Test():
    def a(self, input):
        print "a: " + input
    def b(self, input):
        print "b: " + input
    def c(self, input):
        print "c: " + input

call_all(Test(), 'my input')

Output:

a: my input
b: my input
c: my input
夏日浅笑〃 2024-10-13 09:10:08

你真的不想这样做。 Python 附带了两个非常好的测试框架:请参阅文档中的unittestdoctest 模块。

但你可以尝试这样的事情:

def call_everything_in(an_object, *args, **kwargs):
    for item in an_object.__dict__:
        to_call = getattr(an_object, item)
        if callable(to_call): to_call(*args, **kwargs)

You really don't want to do this. Python ships with two very nice testing frameworks: see the unittest and doctest modules in the documentation.

But you could try something like:

def call_everything_in(an_object, *args, **kwargs):
    for item in an_object.__dict__:
        to_call = getattr(an_object, item)
        if callable(to_call): to_call(*args, **kwargs)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文