当我说“存储”时,我主要是指属性,而不是__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字典中的数据,而不是obj字典中的数据。为了将foo应用于obj,必须将obj作为输入传递到Klass的foo方法中。然后Klass.foo将obj就地修改,或者只从obj读取。
据推测,Klass可以通过两个步骤从obj访问:
__class__的obj字典中查找键(又称字符串).foo字典的关键字中搜索Klass(或任何方法名称)。我们如何只获得obj的字典条目?如果obj中的一个字典(键、值)对是对Klass的引用,这很好,我只是不希望存储在Klass中的方法或类成员变量。我想要obj字典直接指向的数据(和键),。我会将方法访问称为“直接访问”,因为obj的字典中的查找会带我们在途中找到搜索的目标klass's字典(方法foo)。
发布于 2018-05-21 03:11:15
这是完全邪恶的,不给名字,但. gc.get_referents()是相当接近。从医生那里:
gc.get_referents(*objs)返回任何参数直接引用的对象列表。返回的引用是由参数的C级tp_traverse方法(如果有的话)访问的对象,并且可能不是所有实际可直接访问的对象。tp_traverse方法只受支持垃圾收集的对象的支持,并且只需要访问可能涉及循环的对象。因此,例如,如果可以从参数直接访问一个整数,则该整数对象可能出现在结果列表中,也可能不会出现。
https://stackoverflow.com/questions/50441303
复制相似问题