当我说“存储”时,我主要指的是属性,而不是容器元素或__getitem__
.
我的第一个想法是绕过任何重载__getattribute__
的方法(也就是点运算符)object.__getattribute__
。我想我会得到一个未篡改的对象字典。但是,并非所有对象都有__dict__
属性,包括内置list
类型;以下代码...
lyst = list()
dct = object.__getattribute__(lyst, '__dict__')
...引发属性错误:
Traceback (most recent call last):
File "E:/python_playpen/playpen_object_dict.py", line 25, in <module>
dct = object.__getattribute__(sidgfisdgf, '__dict__')
AttributeError: 'list' object has no attribute '__dict__'
Process finished with exit code 1
不过,list
确实有dir
方法。以下代码不会引发错误。
object.__getattribute__(lyst, '__dir__')()
object.__dir__(lyst)
几乎每个 python 对象都有一个dir
方法吗?
dir
似乎返回类方法,但我只想要属于一个对象的数据,而不是属于一个对象实例化的类的数据。
鉴于以下情况: obj = Klass() obj.foo()
通常真的是:
obj = Klass()
Klass.foo(obj)
foo
是Klass
's 字典中的数据,而不是obj
s。为了适用foo
于您,obj
您必须将obj
其作为输入传递给Klass
' 的 foo 方法。然后就地Klass.foo
修改,或者可能只从.obj
obj
Klass
大概可以通过obj
两个步骤访问:
__class__
在obj
的字典中查找键(又名字符串) 。- 在's 字典的键中搜索
foo
(或任何方法名称)Klass
我们如何获得only obj
的字典条目?如果里面的字典(键,值)对之一obj
是对 的引用Klass
,那很好,我只是不希望将方法或类成员变量存储在Klass
. 我想要字典直接obj
指向的数据(和键)。我将方法访问称为“直接”,因为在' 字典中的查找将我们带到' 字典以查找我们的搜索目标(方法)。obj
klass
foo