给定一个任意类X
作为输入,是否有可能找出X
的实例是否有一个__dict__
?你知道吗
我尝试了hasattr(X, '__dict__')
,但没有成功,因为它检查类对象是否有__dict__
:
>>> hasattr(int, '__dict__')
True
>>> vars(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute
没有__slots__
也不能保证有__dict__
:
>>> hasattr(int, '__slots__')
False
>>> vars(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: vars() argument must have __dict__ attribute
我还考虑过用object.__new__(X)
(绕过X.__new__
和X.__init__
创建一个X
实例,这可能会产生不想要的副作用),但对于内置类型来说,这是失败的:
>>> hasattr(object.__new__(int), '__dict__')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object.__new__(int) is not safe, use int.__new__()
有没有可能在不调用任何未知/不受信任的代码(比如X
的构造函数)的情况下做到这一点?你知道吗
您可以使用^{} 模块获取实例的所有非方法属性
将生成
b
的所有属性及其小描述的长列表。你知道吗我做了一些测试,看看它是如何工作的,下面是我的发现
dir()
将在Python3中列出__dict__
,示例:相关问题 更多 >
编程相关推荐