У меня есть этот код в test.py:
class Parent(object):
def __init__(self):
self.myprop1 = "some"
self.myprop2 = "thing"
def duplicate(self):
copy = Parent()
copy.myprop1 = self.myprop1
copy.myprop2 = self.myprop2
return copy
И этот другой в test2.py:
from test import Parent
class Child(Parent):
def __str__(self):
return "{}, {}".format(self.myprop1, self.myprop2)
obj1 = Child()
obj2 = obj1.duplicate()
obj2.myprop1 = "another"
obj2.myprop2 = "stuff"
# Accessing properties
print("obj1, ", obj1.myprop1, ", ", obj1.myprop2)
print("obj2, ", obj2.myprop1, ", ", obj2.myprop2)
# Using Child method
print("obj1,", str(obj1))
print("obj2,", str(obj2))
Запуск test2.py, вывод:
obj1, some, thing
obj2, another, stuff
obj1, some, thing
obj2, <test.Parent object at 0x7fc1558e46d8>
Интересно, смогу ли я создать экземпляр Child внутри Parent, но поскольку там может быть больше потомков, я хочу знать класс self и создать экземпляр этого одного класса, скопируйте атрибуты и затем верните копию объекта.
Цель этого кода - вывести это:
obj1, some, thing
obj2, another, stuff
obj1, some, thing
obj2, another, stuff
Это означает, что obj2 является дочерним объектом, а не родительским объектом.
Надеюсь, это понятно, спасибо!
РЕДАКТИРОВАТЬ : я не хочу использовать copy.copy()
или copy.deepcopy()
. Если вы хотите получить только копию и реализовать более простое решение, отметьте Комментарий Моберга , чтобы увидеть другой связанный вопрос, использующий эти функции. Но этот вопрос предназначен для того, чтобы получить другой способ сделать это, а также узнать, как получить класс из объекта и получить другой экземпляр этого же класса. В этом конкретном случае показаны отношения родитель-ребенок между классами, которые я добавил, чтобы показать весь контекст моих сомнений.