Объект Python как необязательный аргумент инструктора класса - PullRequest
1 голос
/ 08 июня 2019

При создании нового экземпляра (скажем, A) класса я хочу, чтобы экземпляр (скажем, B) другого класса был необязательным аргументом конструктора.Если B задан в качестве аргумента, я хочу, чтобы конструктор A указывал, что B принадлежит A. Если не задан в качестве аргумента, я хочу, чтобы мой конструктор создал новый экземпляр (скажем C) того же класса, что и Bпринадлежат и указывают, что этот новый экземпляр принадлежит A.

Более конкретно, я работаю над процессом прибытия в больницу.Прибытия происходят в соответствии со случайным процессом.Я хочу, чтобы можно было указать, относится ли событие arrival к уже существующему customer (в этом случае я должен дать его в качестве аргумента) или что оно будет НОВЫМ customer, в которомcase мой arrival конструктор должен создать новый экземпляр customer.

Ответы [ 2 ]

1 голос
/ 08 июня 2019
class A:
    def __init__(self, b=None):
        if b is None:
            self.b = B()
        else:
            self.b = b
0 голосов
/ 08 июня 2019

Прибытия происходят в соответствии со случайным процессом.Я хочу, чтобы можно было указать, относится ли событие прибытия к уже существующему клиенту (в этом случае я должен указать его в качестве аргумента) или что это будет НОВЫЙ клиент, и в этом случае мой конструктор прибытия должен создатьновый экземпляр клиента.

это просто использование dict и setdefault:

customers = {}

for co in all_customers:

known_customer = customers.setdefault(hash(co), customer(co))

или если вы хотите использовать его в качестве конструктора:

class arrival:

known_cos = {}# quasi static

def __init__(self, co)

  self.customer = known_cos.setdefault(hash(co) , customer(co))
...