2016-12-27 55 views
1

我有一本字典对象的包装类,我很好奇,如果一个正在实施班里__repr__方法时优于其他:Pythonic哪个更调用__str __()方法或者转换为str()?

class MyClass(object): 
    def __init__(self): 
    self._obj = dict() 
    def __repr__(self): 
    return self._obj.__str__() 

OR

class MyClass(object): 
    def __init__(self): 
    self._obj = dict() 
    def __repr__(self): 
    return str(self._obj) 

第二个实施与str()感觉对我来说。我只是想确保我没有失去任何东西。

回答

6

你说得对。您应该避免直接调用双下划线方法:内置函数是Pythonic执行此操作的方式。

(这同样适用于例如为len(foo) VS foo.__len__()真的。)

+3

我会亲自添加一次你应该使用双下划线方法 - 'super().__ init __()' – Delioth

1

问问你自己:如果__str__可用,为什么人们使用str

__str__只是您可以使用的过载,如果您想修改默认的str方法。同样适用于__len__

你会用这个吗?

print(1.__add__(2)) 

的回答理念:演示芯理解到提问者,优选具有由提问者本身结束的正确答案。