Python: как вызвать метод с определенным параметром, являющимся истинным? - PullRequest
0 голосов
/ 24 февраля 2020
class Mod:
    def __init__(self, prefix='', name=None, **kws):
        self._prefix = prefix
        self.opts = kws
        self._name = name
    def _reprstring(self, long=False):
            out = self._name
            opts = []
            if len(self._prefix) > 0:
                opts.append(f"prefix='{self._prefix}'")
            if long:
                for k, v in self.opts.items():
                      opts.append(f"{k}='{v}'")
            if len(opts) > 0:
                out = f"{out}, {', '.join(opts)}"
            return f"Model({out})"
    @property
    def name(self):
         return self._reprstring(long=False)
    @name.setter
    def name(self, value):
         self._name = value

a=Mod(prefix='my_prefix',name='my_name',age=14,size='unknown')
a.name='olo'
print(a.name)

В приведенном выше коде единственный способ вызвать _reprstring с long=True, набрав a._reprstring(long=True)? Это фактически делает оператор if long почти никогда не используемым.

Нет ли способа сделать это при выполнении print(a.name)? -> Я пытался сделать print(a.name(long=True)), но я получаю ошибку TypeError: 'str' object is not callable. Это потому, что python думает, что я пытаюсь позвонить f"Model({out})"?

1 Ответ

0 голосов
/ 24 февраля 2020

Сохраните инкапсуляцию конфиденциальных функций и данных, поддерживая при этом функциональность, необходимую пользователям, реализуя другое свойство.

...         @property
...         def long_name(self):
...             return self._reprstring(True)
...
>>> a=Mod(prefix='my_prefix',name='my_name',age=14,size='unknown')
>>> a.name='olo'
>>> print(a.long_name)
Model(olo, prefix='my_prefix', age='14', size='unknown')
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...