Что вы будете делать, когда половина ваших пользователей решит использовать d.x
, а другая половина d.xValue
? Что происходит, когда они пытаются поделиться кодом? Конечно, это будет работать, , если вы знаете все псевдонимы , но будет ли это очевидно? Будет ли это очевидно для вас, когда вы отложите свой код на год?
В конце концов, я думаю, что этот вид милости или роскоши - это злая ловушка, которая в конечном итоге вызовет больше путаницы, чем пользы.
Это в основном потому, что мой скрипт API
используется в нескольких подсистемах
домены, поэтому словарь по умолчанию
изменения. То, что известно как «Х» в одном
домен известен как "Y" в другом
домен.
Вы можете создать псевдонимы со свойствами следующим образом:
class Dummy(object):
def __init__(self):
self.x=1
@property
def xValue(self):
return self.x
@xValue.setter
def xValue(self,value):
self.x=value
d=Dummy()
print(d.x)
# 1
d.xValue=2
print(d.x)
# 2
Но по причинам, упомянутым выше, я не думаю, что это хороший дизайн. Это
делает манекен труднее читать, понимать и использовать. Для каждого пользователя вы удвоили
Размер API, который пользователь должен знать, чтобы понять Dummy.
Лучшей альтернативой является использование шаблона проектирования адаптера .
Это позволяет держать манекен красивым, компактным, лаконичным:
class Dummy(object):
def __init__(self):
self.x=1
Хотя те пользователи субдомена, которые хотят использовать другой словарь, могут это сделать
используя класс адаптера:
class DummyAdaptor(object):
def __init__(self):
self.dummy=Dummy()
@property
def xValue(self):
return self.dummy.x
@xValue.setter
def xValue(self,value):
self.dummy.x=value
Для каждого метода и атрибута в Dummy вы просто подключаете похожие методы и свойства
которые делегируют тяжелую работу экземпляру Dummy.
Это может быть больше строк кода, но это позволит вам сохранить чистый дизайн для Dummy, проще в обслуживании, документировании и модульном тестировании. Люди будут писать код, который имеет смысл, потому что класс будет ограничивать доступный API, и для каждого концепта будет только одно имя, учитывая класс, который они выбрали.