我正在定义一个具有多个属性的Class,其中大多数是int
或float
,对于每个我需要设置特定字符串表示形式的属性,是否有__str__
或__repr__
用于属性?
更新:为澄清起见,我想为int
和float
值(例如与实际值相关的“ 022”或“ 3.27”)使用自定义字符串表示形式任意值的静态字符串。
答案 0 :(得分:0)
您可以创建自己的属性对象,并覆盖预期的方法。这是一个示例:
In [48]: class MyProperty(property):
...: def __init__(self, *args, **kwargs):
...: super()
...: def __str__(self):
...: return "custom_name"
...:
In [49]:
In [49]: class C:
...: def __init__(self):
...: self._x = None
...:
...: @MyProperty
...: def x(self):
...: """I'm the 'x' property."""
...: return self._x
...:
...: @x.setter
...: def x(self, value):
...: self._x = value
...:
...: @x.deleter
...: def x(self):
...: del self._x
...:
In [50]:
In [50]: print(C.x)
custom_name
作为另一个示例,您可以在args中找到可调用对象,并将其保存以备后用,以便能够访问您感兴趣的对象的名称或其他属性。
In [78]: class MyProperty(property):
...: def __init__(self, *args, **kwargs):
...: self.__inp = next(i for i in args if isinstance(i, types.FunctionType))
...: super()
...:
...: def __str__(self):
...: return f"property name is : {self.__inp.__name__}"
然后:
In [80]: print(C.x)
property name is : x