我想获取一个类对象的实例。我有它的地址和对象的名称。如何创建对象的实例或如何检索同一个对象?
该类在一个python模块中定义,我希望它在另一个python模块中使用。
我可以使用对象ID来访问类的对象吗?
我的实际问题是我有一个Python模块,其中定义了一个类(class Myclass
)。我在新代码中重用该模块。我希望在我的新文件中访问旧模块中定义的Myclass
对象。
有谁能建议我实现这个目标?我没有权限访问已定义类的模块源代码。我可以设法用垃圾收集器获取类名。
答案 0 :(得分:2)
id
仅定义为当前现有元素中元素唯一的数字*。一些Python实现(事实上,除了CPython之外的所有主要实现)都不返回内存地址。
%~> pypy
Python 2.7.3 (480845e6b1dd219d0944e30f62b01da378437c6c, Aug 08 2013, 17:02:19)
[PyPy 2.1.0 with GCC 4.8.1 20130725 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``arguably, everything is a niche''
>>>> a = 1
>>>> b = 2
>>>> c = 3
>>>> id(a)
9L
>>>> id(b)
17L
>>>> id(c)
25L
所以你必须保证它是的内存地址。此外,由于此,Python不提供id → object
映射,尤其是如果原始文件被删除,id
映射到的对象可以更改。
你必须问为什么你持有id
。如果出于空间原因,请注意容器实际上将引用包含在项目中,因此[a, a, a, a, a]
实际占用的空间少于[id(a), id(a), id(a), id(a), id(a)]; a
。
您还可以考虑为所有相关项目制作dict
{id: val}
并存储该项目。这将使val
保持活动状态,因此您可以使用weakref
来允许val
被垃圾回收。请记住,use weakref
if you want a weakref
。
答案 1 :(得分:2)
我的实际问题是“我有一个python模块,其中已经定义了一个类”Class Myclass“。我在新代码中重用该模块。我希望在旧模块中定义的Myclass对象必须可以在我的新文件中访问。任何人都可以建议我实现这个目的。我没有权限访问类定义的模块。我可以管理以获取垃圾收集器的类名。
如果您重复使用模块,则可以访问该模块。
例如,如果所述模块创建如下对象:
class MyClass:
pass
myobj = MyClass()
然后,您也可以在导入模块时导入该引用:
from othermodule import MyClass, myobj
答案 2 :(得分:1)
id
你做不到。按名称:
class A:
def __init__(self,val):
self.v = val
myInst = A(3)
print eval("myInst").v
>>> 3