标签: introspection

检查Python中的成员是否存在

我经常想检查对象是否有成员.一个例子是在函数中创建单例.为此,您可以这样使用hasattr:

class Foo(object):
    @classmethod
    def singleton(self):
        if not hasattr(self, 'instance'):
            self.instance = Foo()
        return self.instance
Run Code Online (Sandbox Code Playgroud)

但你也可以这样做:

class Foo(object):
    @classmethod
    def singleton(self):
        try:
            return self.instance
        except AttributeError:
            self.instance = Foo()
            return self.instance
Run Code Online (Sandbox Code Playgroud)

另一种方法更好吗?

编辑:添加了@classmethod...但请注意,问题不是关于如何制作单例,而是如何检查对象中是否存在成员.

编辑:对于该示例,典型用法是:

s = Foo.singleton()
Run Code Online (Sandbox Code Playgroud)

然后s是类型的对象,Foo每次都相同.并且,通常,该方法被多次调用.

python exception introspection hasattr

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

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

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

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

python introspection python-2.5

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

如何找到符合KVC标准的Objective-C对象的所有属性键?

是否有一个方法返回符合NSKeyValueCoding协议的对象的所有键?

沿着这条线的东西[object getPropertyKeys]将返回NSString对象的NSArray.它适用于任何符合KVC标准的对象.这种方法存在吗?到目前为止,我还没有找到任何搜索Apple文档的内容.

谢谢,G.

cocoa properties introspection objective-c key-value-observing

25
推荐指数
1
解决办法
1万
查看次数

使用装饰器进行Python日志记录

这是我们面对装饰时遇到的第一个例子.但是我无法意识到我到底想要什么.

一个名为LOG的简单装饰器.它应该像这样工作:

@LOG
def f(a, b=2, *c, **d):
    pass
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的:

f(1, pippo=4, paperino='luca')
===== Enter f =====
a = 1
b = 2
pippo = 4
paperino = luca
===== Exit f =====
Run Code Online (Sandbox Code Playgroud)

将作为参数传递给函数的每个参数显示为其值.

我发现问题比我想象的更难,主要是因为你可以通过许多不同的方式将参数传递给函数(想想带有*c的元组或带有**d的字典).

我试过一个解决方案,但我不确定它是否正确.它有点像这样:

def LOG(fn):
    import inspect
    varList, _, _, default = inspect.getargspec(fn)
    d = {}
    if default is not None:
        d = dict((varList[-len(default):][i], v) for i, v in enumerate(default))
    def f(*argt, **argd):
        print ('Enter %s' % fn).center(100, '=')
        d.update(dict((varList[i], v) for i, v in enumerate(argt)))
        d.update(argd) …
Run Code Online (Sandbox Code Playgroud)

python logging introspection decorator

25
推荐指数
1
解决办法
7446
查看次数

获取属性名称作为字符串

我需要一种方法来传递属性并获取分配给它的名称.有什么建议?

@property (nonatomic, retain) MyObject *crazyObject;

NSString *str = SOME_WAY_TO_GET_PROPERTY_NAME(crazyObject);
// Above method should return @"crazyObject"
Run Code Online (Sandbox Code Playgroud)

introspection objective-c objective-c-runtime declared-property

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

覆盖__dir__方法的正确方法是什么?

这个问题意味着更多的是__dir__关于numpy.

我有一个子类numpy.recarray(在python 2.7,numpy 1.6.2),我注意到在对象recarray时没有列出字段名称dir(因此ipython的自动完成功能不起作用).

试图修复它,我尝试覆盖__dir__我的子类,像这样:

def __dir__(self):
    return sorted(set(
               super(MyRecArray, self).__dir__() + \
               self.__dict__.keys() + self.dtype.fields.keys()))
Run Code Online (Sandbox Code Playgroud)

结果是:AttributeError: 'super' object has no attribute '__dir__'.(我发现这里实际上应该在python 3.3中工作......)

作为解决方法,我试过:

def __dir__(self):
    return sorted(set(
                dir(type(self)) + \
                self.__dict__.keys() + self.dtype.fields.keys()))
Run Code Online (Sandbox Code Playgroud)

据我所知,这个有用,但当然不是那么优雅.

问题:

  1. 在我的情况下,后一种解决方案是否正确,即对于子类recarray
  2. 有没有办法让它在一般情况下有效?在我看来,它不适用于多重继承(打破super-call链),当然,对于没有__dict__...的对象
  3. 你知道为什么recarray不支持列出其字段名称开头?仅仅是疏忽?

python inheritance introspection python-2.7

25
推荐指数
2
解决办法
5918
查看次数

获取Swift中泛型类型的名称(字符串)

我有一个类型为T的泛型类,我想获得实例化时传递给类的类型的名称.这是一个例子.

class MyClass<T> {
    func genericName() -> String {
        // Return the name of T.
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在寻找几个小时,我似乎无法找到任何方法来做到这一点.有人试过这个吗?

任何帮助是极大的赞赏.

谢谢

generics types introspection swift

25
推荐指数
3
解决办法
1万
查看次数

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

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

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

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

python introspection python-datamodel

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

如何在Objective-C中列出对象的所有字段?

如果我有一个类,我怎么能列出它的所有实例变量名?

例如:

@interface MyClass : NSObject {
    int myInt;
    NSString* myString;
    NSMutableArray* myArray;
}
Run Code Online (Sandbox Code Playgroud)

我想得到"myInt","myString"和"myArray".有没有办法可以得到一个我可以迭代的名字数组?

我已经尝试过搜索Objective-C文档但找不到任何东西(我也不确定这是什么).

class introspection objective-c objective-c-runtime

23
推荐指数
2
解决办法
8229
查看次数

得到kwargs Inside Function

如果我有这样的python函数:

def some_func(arg1, arg2, arg3=1, arg4=2):
Run Code Online (Sandbox Code Playgroud)

有没有办法确定哪些参数是通过关键字从函数内部传递的?

编辑

对于那些问我为什么需要这个的人,我没有真正的理由,它出现在一次谈话中,好奇心让我变得更好.

python introspection kwargs

23
推荐指数
3
解决办法
9592
查看次数