Python Class属性的自定义字符串表示形式

时间:2018-12-06 10:16:36

标签: python string python-3.x class

我正在定义一个具有多个属性的Class,其中大多数是intfloat,对于每个我需要设置特定字符串表示形式的属性,是否有__str____repr__用于属性?

更新:为澄清起见,我想为intfloat值(例如与实际值相关的“ 022”或“ 3.27”)使用自定义字符串表示形式任意值的静态字符串。

1 个答案:

答案 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