我该如何继承内置?

时间:2013-08-09 14:52:11

标签: python class inheritance built-in

我想给一个类,我创建了一个字符串所有的方法(replaceisupper等。) 下面是一些示例代码:

>>> class MyClass(str):
...     def __init__(self, string):
...         self.string = string
...     def __str__(self):
...         return self.string
...
>>> MyClass("aaa").replace("a", "$")
'$$$'
>>>

这完全符合我的要求。但是,我对如何继承str感到困惑。我可以像上面那样做,或者:

class MyClass(__builtins__.str):
    ...

甚至:

import types
class MyClass(types.__builtins__["str"]):

总结一下,我的问题是:从str(或任何其他内置事件)继承的最佳方式是什么?我有没有给它,或者有更好的方式我没想到。

感谢。

2 个答案:

答案 0 :(得分:1)

class MyClass(str):

很好。我不认为这有问题。为什么要使用builtin和所有...

来给自己增加负担

答案 1 :(得分:1)

永远不要触摸__builtins__这是一个实施细节。引用容易混淆的同名__builtin__模块的文档:

  

CPython实现细节:大多数模块的名称__builtins__(注意's')作为其全局变量的一部分提供。 __builtins__的值通常是此模块或此模块的 dict 属性的值。由于这是一个实现细节,因此Python的替代实现可能不会使用它。

只需继承str。没有理由不这样做;它不是更快或更清楚,或者使用其他名称的任何东西。