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})"
?