【发布时间】:2012-07-28 20:47:05
【问题描述】:
有没有办法找到静态方法所属的类的名称?
class A(object):
@staticmethod
def my_staticmethod():
return 'static'
@classmethod
def my_classmethod():
return 'classmethod'
In [2]: A.my_staticmethod
Out[2]: <function utils.my_staticmethod>
In [3]: A.my_classmethod
Out[3]: <bound method type.my_classmethod of <class 'utils.A'>>
In [4]: A.my_classmethod.im_self.__name__
Out[4]: 'A'
对于类方法,我可以通过A.my_classmethod.im_self.__name__ 获取类的名称,但对于静态方法我无法弄清楚。
有什么想法吗? 谢谢。
嗯,实际上这就是我想要做的。 我正在尝试制作 2 个函数来“序列化/反序列化”一个函数/类方法/静态方法。
也就是说,有人可以将一个函数传递给序列化函数并获取一个字符串。
a_string = serialize(A.my_classmethod)
这个字符串可以存储在数据库中,例如.. 那么,这个字符串应该足以解析能够调用它的函数:
# later on...
f = deserialize(a_string)
# I can use my function
f(...)
我可以使它适用于函数或类方法,但不适用于静态方法,因为我无法确定它所属的类并使用 getattr...
【问题讨论】:
-
基本上,静态方法的全部意义在于它与其类没有任何联系。如果您想知道它在哪个类中,请不要使用静态方法。
-
@BrenBarn 同意。这就像在您卸下车轮后询问如何驾驶汽车一样。答案是重新戴上它们。
-
如果你愿意,你可以用
inspect做一些粗糙的事情,但是你想要做的事情可能有一个简单的解决方案,也许一个简单的hasattr(A, 'my_staticmethod')是你正在寻找的?
标签: python