У меня есть несколько вопросов. Имейте в виду, что мне нужно использовать глубокую копию, поскольку мои классы будут расширяться по сложности.python добавить объект к переменной при использовании deepcopy
- Есть ли способ сделать это не до предела рекурсии, когда я делаю глубокую копию?
- Когда я создаю глубокую копию, я хочу, чтобы новая копия была добавлена к переменной NODES так же, как в init?
import copy
# Global
NODES = []
# Classes
class Node(object):
def __init__(self, name, age):
self.name = name
self.age = age
class Truck(Node):
def __init__(self, name="", age=0):
super(Truck, self).__init__(name=name, age=age)
NODES.append(self)
class Car(Node):
def __init__(self, name="", age=0):
super(Car, self).__init__(name=name, age=age)
NODES.append(self)
def __deepcopy__(self, memo):
print '__deepcopy__(%s)' % str(memo)
return Car(copy.deepcopy(self, memo))
Truck(name="Tonka Truck")
Truck(name="Monster Truck")
Truck(name="Pickup Truck")
car = Car(name="Oldsmobile Car")
car.age = 55
new_car = copy.deepcopy(car)
type_name = "Car"
cars = [x for x in NODES if type(x).__name__ == type_name]
print cars
print "NODES:"
for node in NODES:
print "\t", node.name, node.age
Звучит как случай для метаклассов. Удачи, они смутили меня. – Holloway
Почему вы не можете сделать первую часть этого в 'Node .__ init__'? К этому моменту у вас есть вся необходимая информация. –
как бы я сделал часть 2, то? – JokerMartini