相关疑难解决方法(0)

查找Python对象具有的方法

给定一个任何类型的Python对象,是否有一种简单的方法来获取该对象具有的所有方法的列表?

要么,

如果这是不可能的,至少有一种简单的方法来检查它是否有一个特定的方法,而不仅仅是检查方法被调用时是否发生错误?

python introspection

379
推荐指数
12
解决办法
32万
查看次数

我如何查看Python对象?

我开始使用Python编写各种项目代码(包括Django Web开发和Panda3D游戏开发).

为了帮助我理解正在发生的事情,我想基本上"查看"Python对象内部以查看它们如何勾选 - 就像它们的方法和属性一样.

所以说我有一个Python对象,我需要打印出它的内容?这甚至可能吗?

python introspection

266
推荐指数
13
解决办法
28万
查看次数

如何获得对象的方法和属性的完整列表?

dir(re.compile(pattern)) 
Run Code Online (Sandbox Code Playgroud)

不会将模式作为列表元素之一返回.即它返回:

['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']
Run Code Online (Sandbox Code Playgroud)

根据手册,它应该包含

对象的属性名称,类的属性名称,以及类的基类属性的递归.

它也说

该清单未必完整.

有没有办法完成清单?我总是认为dir会返回一个完整的列表,但显然它没有......

另外:有没有办法只列出属性?还是只有方法?

编辑:这实际上是python中的一个错误 - >据说它在3.0分支中修复(也许在2.6中)

python

217
推荐指数
5
解决办法
32万
查看次数

如何在Python中枚举对象的属性?

IC#我们通过反思来做到这一点.在Javascript中它很简单:

for(var propertyName in objectName)
    var currentPropertyValue = objectName[propertyName];
Run Code Online (Sandbox Code Playgroud)

怎么用Python做?

python reflection properties

116
推荐指数
7
解决办法
13万
查看次数

实例方法的Python装饰器可以访问该类吗?

嗨我有类似下面的东西.基本上我需要从定义中的实例方法使用的装饰器访问实例方法的类.

def decorator(view):
    # do something that requires view's class
    print view.im_class
    return view

class ModelA(object):
    @decorator
    def a_method(self):
        # do some stuff
        pass
Run Code Online (Sandbox Code Playgroud)

代码原样给出

AttributeError: 'function' object has no attribute 'im_class'

我发现类似的问题/答案 - Python装饰器让函数忘记它属于一个类Python装饰器中的Get类 - 但这些依赖于一种解决方法,它通过抢夺第一个参数在运行时抓取实例.在我的情况下,我将基于从其类中收集的信息调用该方法,因此我不能等待来电.

谢谢.

python decorator

99
推荐指数
6
解决办法
5万
查看次数

如何在不为每种方法反复输入的情况下装饰类的所有函数?

让我说我的类有很多方法,我想在每一个方法上应用我的装饰,后来当我添加新方法时,我想要应用相同的装饰器,但我不想在方法声明之上写@mydecorator所有时间?

如果我调查的__call__是正确的方法吗?

重要提示:以下示例似乎解决了与原始问题不同的问题.

编辑:我想以这种方式展示,这是我的问题的类似解决方案,对于任何人后来发现这个问题,使用评论中提到的mixin.

class WrapinMixin(object):
    def __call__(self, hey, you, *args):
        print 'entering', hey, you, repr(args)
        try:
            ret = getattr(self, hey)(you, *args)
            return ret
        except:
            ret = str(e)
            raise
        finally:
            print 'leaving', hey, repr(ret)
Run Code Online (Sandbox Code Playgroud)

然后你可以在另一个

class Wrapmymethodsaround(WrapinMixin): 
    def __call__:
         return super(Wrapmymethodsaround, self).__call__(hey, you, *args)
Run Code Online (Sandbox Code Playgroud)

python decorator wrapper

52
推荐指数
5
解决办法
3万
查看次数

如何在Python 2.5模块中列出方法?

我正在尝试使用用C编写的Python库,它没有任何文档.我想使用内省来至少看看模块中有哪些方法和类.有人有一个函数或库我可以用来列出模块中的函数(带参数列表)和类(带方法和成员变量)吗?

我发现这篇关于Python内省的文章,但我很确定它不适用于Python 2.5.谢谢您的帮助.

python introspection python-2.5

26
推荐指数
3
解决办法
4万
查看次数

如何在Python 2.x中对对象执行自省?

我正在使用Python 2.x,我有一个我正在从以太召唤的对象; 关于它的文件不是特别清楚.我希望能够获得该对象的属性列表以及每个属性的类型.

同样,我想获得该对象的方法列表,以及我可以在该方法上找到的任何其他信息,例如参数的数量和它们各自的类型.

我有一种感觉,我只是在Google搜索中错过了正确的术语.并不是说我想破坏具体细节,但它是Active Directory,所以这总是很有趣.

python introspection python-datamodel

24
推荐指数
3
解决办法
2万
查看次数

如何从类中的方法动态创建模块级函数

我试图从类中的方法动态创建模块级函数.因此,对于类中的每个方法,我想创建一个具有相同名称的函数,该函数创建类的实例,然后调用该方法.

我想这样做的原因是我可以采用面向对象的方法来创建Fabric文件.由于Fabric将调用模块级函数而不是类的方法,因此这是我的解决方法.

我使用以下链接让我开始

我提出了以下代码

import inspect
import sys
import types

class TestClass(object):
    def __init__(self):
        pass

    def method1(self, arg1):
        print 'method 1 %s' % arg1

    def method2(self):
        print 'method 2'

def fabric_class_to_function_magic(module_name):
    # get the module as an object
    print module_name
    module_obj = sys.modules[module_name]
    print dir(module_obj)

    # Iterate over the methods of the class and dynamically create a function
    # for each method that calls the method and add it to the current module
    for …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming fabric

9
推荐指数
1
解决办法
6853
查看次数

在课堂上运行所有功能

我试图在我的课程中运行所有的功能,而不是单独输入它们.

class Foo(object):
    def __init__(self,a,b):
        self.a = a
        self.b=b

    def bar(self):
        print self.a

    def foobar(self):
        print self.b
Run Code Online (Sandbox Code Playgroud)

我想这样做但是有一个循环,因为我的实际类有大约8-10个函数.

x = Foo('hi','bye')
x.bar()
x.foobar()
Run Code Online (Sandbox Code Playgroud)

python class

9
推荐指数
3
解决办法
9696
查看次数