Python 如何在新类中实例化对象?
有点奇怪的问题,但我想知道如何将对象从一个类导入到另一个类。我想象在扩展程序时添加更多的类方法和属性,我仍然希望能够使用旧数据。我的想法如下:Python 如何在新类中实例化对象?,python,class,oop,object,Python,Class,Oop,Object,有点奇怪的问题,但我想知道如何将对象从一个类导入到另一个类。我想象在扩展程序时添加更多的类方法和属性,我仍然希望能够使用旧数据。我的想法如下: class old_obj: def __init__(self, text): self.name = text def set_amount(self, num): self.amount = num def introduce_yourself(self): print(
class old_obj:
def __init__(self, text):
self.name = text
def set_amount(self, num):
self.amount = num
def introduce_yourself(self):
print("I am {} and I am {} many".format(self.name, self.amount))
oldest = old_obj("myself")
oldest.set_amount(15)
also_old = old_obj("Bach")
class new_obj:
def __init__(self):
#some code
#more code
我希望能够写一些东西,比如:
renewed = new_obj(oldest)
also_new = new_obj(also_old)
在这里,我想保留oldest.amount
中的15
,但不要抱怨也是旧的。amount
是None
。特别是,我希望保留最早的
具有的任何属性,同时不要求它具有所有可能的属性。有没有办法将一个类的实例复制到一个新类
编辑:为清晰起见进行编辑您只需通过传递旧对象来初始化新对象即可
class old_obj:
def __init__(self, text):
self.text = text
oldest = old_obj("myself")
class new_obj:
def __init__(self, old_inst):
self.text = old_inst.text
renewed = new_obj(oldest)
print(renewed.text)
首先,使您的
new_obj
类继承自old_obj
,以便new_obj
具有old_obj
拥有的所有方法:
class new_obj(olb_obj):
然后,在新类的\uuuuu init\uuuuu
方法中,可以检查作为参数传递的内容-字符串或对象:
def __init__(self, arg):
if isinstance(arg, str):
self.text = arg
elif isinstance(arg, old_obj):
self.text = arg.text
else:
raise TypeError
可以将对象实例dict复制到新类中
from copy import deepcopy
class old_obj:
def __init__(self, text):
self.name = text
def set_amount(self, num):
self.amount = num
def introduce_yourself(self):
print("I am {} and I am {} many".format(self.name, self.amount))
oldest = old_obj("myself")
class new_obj:
def __init__(self, my_old_obj):
for var, val in my_old_obj.__dict__.items():
setattr(self, var, deepcopy(val))
#some code
#more code
newest = new_obj(oldest)
假设您希望新对象中的值唯一,我对该值进行了深度复制。但这也可能有问题,因为并非所有东西都可以复制(例如文件对象)。在复制属性时,可能会有其他奇怪之处,例如您希望对生成器执行的操作。如果这是一个类似GUI的小部件,它可能会变得更奇怪
但对于许多对象类型,这将起作用。稍有不同: 您的新类有一组可能与旧类类似的关注点。这应该指导您更新它和构建有问题的行为的方式。考虑到这一点
\uuuuu init\uuuu
的一部分。您的\uuuu init\uuuu
应该承担更有限的责任。对于类方法,使用旧对象的\uuuuu dict\uuu
更新新对象的\uuuu dict\uuuu
就可以完成这项工作我不确定我是否足够清楚和具体,但我特别需要能够根据原始对象具有多少属性来扩展实例化。我将编辑我的原始问题,使之更清楚。@Mathcoller-这个比例。。。关键是,我希望能够插入旧对象,其中一些设置了所有属性,而另一些没有。我想保留他们所有的信息,同时又不需要。为什么不扩展它呢<代码>类new\u obj(old\u obj):。这看起来更像我要找的。我想如果我结合@Błotosmętek的答案,我可以通过传入一个旧对象或传入一个字符串来设置新对象。我想这解决了我的问题,谢谢!