python – 类对象上的getattr
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 类对象上的getattr,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1430字,纯文字阅读大概需要3分钟。
内容图文
![python – 类对象上的getattr](/upload/InfoBanner/zyjiaocheng/803/01d723470b0f4f2eb7acb3c8eeb89a34.jpg)
class A:
def foo(self):
print "foo()"
getattr(A, foo) # True
A.foo() # error
getattr(A(), foo) # True
A().foo() # prints "foo()"
话虽这么说,这是我的问题:
我希望将测试用例元信息存储为Test Case类对象本身的属性,而不是它们的实例.
我有一个要提取的属性名称列表,但是如果有一个同名的实例方法,那么getattr(class_obj,attr)将返回True,但是getattr(class_obj,attr)()会引发一个Error.
有没有办法告诉getattr不要包含实例化类的属性,只包含类对象本身的属性?
编辑:我尝试直接访问class_obj .__ dict__(我理解这是不好的做法),但它不包括像__name__这样的属性
编辑:问题的改写.有没有办法区分类obj的方法和类的实例的方法?
解决方法:
这够好吗?
import types
class Test(object):
@staticmethod
def foo():
print 'foo'
def bar(self):
print 'bar'
结合:
>>>(isinstance(getattr(Test, 'foo'), types.FunctionType),
isinstance(getattr(Test, 'bar'), types.FunctionType))
True, False
您也可以使用inspect模块:
>>> inspect.isfunction(Test.foo)
True
>>> inspect.isfunction(Test.bar)
False
通过一些额外的工作,您甚至可以将类方法与实例方法和静态方法区分开来:
import inspect
def get_type(cls, attr):
try:
return [a.kind for a in inspect.classify_class_attrs(cls) if a.name == attr][0]
except IndexError:
return None
class Test(object):
@classmethod
def foo(cls):
print 'foo'
def bar(self):
print 'bar'
@staticmethod
def baz():
print 'baz'
您可以将其用作:
>>> get_type(Test, 'foo')
'class method'
>>> get_type(Test, 'bar')
'method'
>>> get_type(Test, 'baz')
'static method'
>>> get_type(Test, 'nonexistant')
None
内容总结
以上是互联网集市为您收集整理的python – 类对象上的getattr全部内容,希望文章能够帮你解决python – 类对象上的getattr所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。