Будет ли работать что-то простое, как показано ниже?
При создании экземпляра объекта проверьте, было ли предоставлено слишком много или слишком мало данных, а затем определите свойство, которое будет вычислять значение при необходимости?
class Item ():
def __init__(self, id: int =None, name:str= None):
if all ([name, id]):
raise ValueError ("id_ and name cannot be provided together")
elif not any ([name, id]):
raise ValueError ("name or id must be provided for Item instantiation")
else:
self._name = name
self._id = id
@property
def name (self) -> str:
if self._name is None:
#Compute the value and return it
pass #remove this once you figure out your algorithm
else:
return self._name
@property
def id (self) ->int:
if self._id is None:
#Compute the value and return it
pass #remove this once you figure out your algorithm
else:
return self._id
Обратите внимание, что вы также должны принять во внимание, что является допустимым значением.В моем примере, приведенном в качестве примера, недостаточно, если вы считаете целое число 0
допустимым id
и пустую строку ""
действительным name
.