Python 如何在父类内创建子类的对象?
我在test.py中有以下代码: 类Parentobject: 定义初始自我: self.myprop1=some self.myprop2=事物 自我定义: 复制=父项 copy.myprop1=self.myprop1 copy.myprop2=self.myprop2 返回副本 test2.py中的另一个: 从测试导入父级 类别ChildParent: 定义自身: 返回{},{}.formatself.myprop1,self.myprop2 obj1=子对象 obj2=obj1。重复 obj2.myprop1=另一个 obj2.myprop2=stuff 访问属性 打印对象J1,对象J1.myprop1,,对象J1.myprop2 打印对象J2、对象J2.myprop1、对象J2.myprop2 使用Child方法 printobj1,,strobj1 printobj2,,strobj2 运行test2.py时,输出为: 一些东西 obj2,另一个,东西 一些东西 obj2, 我想知道是否可以在父类中创建一个Child实例,但是因为可能会有更多的Child,我想知道self的类并创建该类的实例,复制属性,然后返回对象副本 此代码的目标是输出以下内容: 一些东西 obj2,另一个,东西 一些东西 obj2,另一个,东西 这意味着obj2是子对象而不是父对象 希望这是清楚的,谢谢 编辑:我不想使用copy.copy或copy.deepcopy。如果您只想获得一个副本并实现一个更简单的解决方案,请查看使用这些函数的另一个相关问题。Python 如何在父类内创建子类的对象?,python,python-3.x,class,object,Python,Python 3.x,Class,Object,我在test.py中有以下代码: 类Parentobject: 定义初始自我: self.myprop1=some self.myprop2=事物 自我定义: 复制=父项 copy.myprop1=self.myprop1 copy.myprop2=self.myprop2 返回副本 test2.py中的另一个: 从测试导入父级 类别ChildParent: 定义自身: 返回{},{}.formatself.myprop1,self.myprop2 obj1=子对象 obj2=obj1。重复 o
但是,这个问题的目的是获得另一种实现方法,并且知道如何从对象获取类,以及如何获取同一类的另一个实例。这个特殊的案例显示了类之间的父子关系,我添加了它来显示我怀疑的整个上下文。只是不要硬编码类,使用type来检索实例的类,类似于:
class Parent(object):
def __init__(self):
self.myprop1 = "some"
self.myprop2 = "thing"
def duplicate(self):
cls = type(self)
copy = cls()
copy.myprop1 = self.myprop1
copy.myprop2 = self.myprop2
return copy
要创建副本实例,可以使用:
def duplicate(self):
copy = type(self)()
...
但是更好的解决方案是使用是的,使用typeself获取对象的类型。还考虑用DuntType方法实现复制,以支持构建副本。
类方法可能更好,因为它可以让您控制所创建对象的类型
class Parent(object):
def __init__(self):
self.myprop1 = "some"
self.myprop2 = "thing"
@classmethod
def from_object(cls: 'T', obj: Parent) -> 'T':
copy = cls()
copy.myprop1 = obj.myprop1
copy.myprop2 = obj.myprop2
return copy
class Child(Parent):
def __str__(self):
return "{}, {}".format(self.myprop1, self.myprop2)
obj1 = Child()
obj2 = Child.from_object(obj1) # A new Child
obj3 = Parent.from_object(obj1) # A new Parent
另一方面,为什么Parent.\uuu init\uuuu不接受参数?这是否回答了您的问题@chepner感谢您的提问,您的意思是将字符串文本作为参数放在子构造函数中,以便父构造函数_uinit _;接受并分配它吗?如果是这样的话,这是因为我想知道如何在父类中创建子类的实例,我创建了这个简单的代码来尽可能地显示这个特定的问题和上下文。@Moberg感谢您的评论,这是一个很好的选择。尽管如此,它取代了复制方法,我想知道如何在不使用copy或deepcopy的情况下实现这一点,因为在我目前正在编写的代码中,这两种方法都不适用于我。因此,我将编辑问题,添加我不想使用copy或deepcopy的内容。谢谢谢谢我将替换副本并改为使用_copy _;
class Parent(object):
def __init__(self):
self.myprop1 = "some"
self.myprop2 = "thing"
@classmethod
def from_object(cls: 'T', obj: Parent) -> 'T':
copy = cls()
copy.myprop1 = obj.myprop1
copy.myprop2 = obj.myprop2
return copy
class Child(Parent):
def __str__(self):
return "{}, {}".format(self.myprop1, self.myprop2)
obj1 = Child()
obj2 = Child.from_object(obj1) # A new Child
obj3 = Parent.from_object(obj1) # A new Parent