【问题标题】:How should I inherit from a built-in?我应该如何从内置继承?
【发布时间】:2013-08-11 13:22:02
【问题描述】:

我想给一个类我做了一个字符串所有的方法(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(或任何其他内置的)继承的最佳方式是什么?是我给的还是我没有想到的更好的方法。

谢谢。

【问题讨论】:

  • 一般来说,您不应该关心__builtins__。只需直接使用str。但是,这里有实际问题吗?
  • @MartijnPieters - 不,直接使用str 没有任何问题。我只是想澄清一下从内置继承的最佳方式是什么。因为有几种方法可以做我想做的事,所以我喜欢选择最好的。

标签: python class inheritance built-in


【解决方案1】:
class MyClass(str):

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

【讨论】:

    【解决方案2】:

    永远不要碰__builtins__这是一个实现细节。引用令人困惑的类似名称 __builtin__ 模块的文档:

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

    只是继承自str。没有理由不这样做;它并没有更快或更清晰,也没有任何其他名称。

    【讨论】:

    • 酷。和我想的一样。只是想确定一下。
    猜你喜欢
    • 2010-12-22
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多