В последнее время я занимаюсь разведением ООП.Передача экземпляров в качестве дополнительных аргументов другому классу
У меня есть два класса: один для события и один для вычисления некоторого набора атрибутов этого события.
class Event(object):
def __init__(self,name,info):
self.name = name
self.category = info.category
self.classification = info.classification
@property
def attributes(self):
return dict((k,v) for k,v in self.__dict__.items())
class class1(object):
def __init__(self,some_number):
self.number = some_number
@property
def category(self):
#stuff
return category
@property
def classification(self):
#stuff
return classification
Прямо сейчас я могу сделать что-то вроде
e = Event('myevent', class1(42))
e.attributes
{'category': 1,
'classification': None,
'name': 'myevent'}
Но я хочу, чтобы иметь возможность давать Event()
экземпляры любого числа/комбинации будущего class2
, class3
и т.д.; и поэтому я хочу Event()
init()
метод, чтобы изящно обрабатывать их так, чтобы e.attributes
вернул все соответствующие атрибуты. Предоставление Event.__init__
a * param для распаковки, похоже, не обходит необходимость знать имена атрибутов, которые ему нужно назначить себе. В конечном итоге то, что я хочу сделать, - это создать это событие, а затем создать/обновить его различные наборы атрибутов по мере необходимости, используя эту парадигму. Является ли это возможным?
Во-первых, почему 'dict ((k, v) для k, v в себе .__ dict __. Items())' просто для копирования dict? Во-вторых, почему вы притворяетесь диктарем над диктором в первую очередь? Возможно, вам нужно [лучше объяснить, что вы на самом деле пытаетесь выполнить, а не просто показывать свое частичное решение] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – abarnert
Я пытаюсь понять ваш вопрос, но это очень неясно. Я подозреваю, что есть хороший шанс, что, если бы вы объяснили это лучше, вы могли бы сами ответить самим ответом? –
Я нахожусь над моей головой, поэтому я вполне могу быть виновным в проблеме xy, но я попытаюсь уточнить. У Miku почти есть то, что я хочу, за исключением того, что я являюсь после аддитивного процесса: я хочу обновить «e.attributes» после двух приведенных им вызовов, чтобы его значения были «{« i_am_totally_different »:« да, действительно », 'name': 'myevent', 'category': 'category value', 'class': 'class value', 'number': 42} '. И чтобы ответить на вопрос Майка, это потому, что у меня может не быть всей информации, необходимой для всех классов, когда я сначала создаю 'e', но я не хочу использовать атрибуты обновления по частям. – verbsintransit