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})"
吗?
保留对敏感函数和数据的封装,同时通过实现另一个属性仍然支持用户需要的功能。
... @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')
>>>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句