【问题标题】:Location of python string class in the source codepython字符串类在源代码中的位置
【发布时间】:2011-04-18 17:49:48
【问题描述】:

我正在考虑为某个字符串重载+ 运算符,因此我正在考虑对字符串类进行子类化,然后在新类中添加代码。但是我想先看看标准的字符串类,但我似乎找不到它......愚蠢吧?

谁能指路?甚至是源代码的在线文档。

【问题讨论】:

  • 它可能是 C 扩展和内置类型,所以我认为不可能将代码打开为 .py 文件,如您所想...
  • “我正在考虑为某个字符串重载 '+' 运算符”。在任何情况下,“某个字符串”的“重载”都是不明智的。您可能想要一类完全可以很好地与字符串配合使用的新对象。您应该提供更多信息,因为您所描述的内容没有多大意义。
  • 好吧,具体情况是重载字符串,因此当我添加使用具有数字类型(int、float 等)的 add 方法时,它将“递增”到对应的字母。例如'A' + 2 = 'C'。然而,由于我以前从未做过任何类型的重载,我也对一般意义上的运算符重载方式感兴趣,而不仅仅是在这种特殊情况下。
  • "它将'递增'到相应的字母。例如'A' + 2 = 'C'。"?那不是“字符串”。那是一个“性格”。与其他字符串一起使用时碰巧提供字符串结果的高度限制和专门的对象类?你说的是这个吗?

标签: python string class


【解决方案1】:

已记录在 here。主要实现在Objects/stringobject.c。不过,子类化str 可能不是您想要的。我更喜欢这里的构图;有一个带有字符串字段和特殊行为的对象。

【讨论】:

【解决方案2】:

你可能是这个意思。

class MyCharacter( object ):
    def __init__( self, aString ):
        self.value= ord(aString[0])
    def __add__( self, other ):
        return MyCharacter( chr(self.value + other) )
    def __str__( self ):
        return chr( self.value )

它是这样工作的。

>>> c= MyCharacter( "ABC" )
>>> str(c+2)
'C'
>>> str(c+3)
'D'
>>> c= c+1
>>> str(c)
'B'

【讨论】:

    【解决方案3】:

    我的实现是类似的,虽然不是那么整洁:

    class MyClass:
        def __init__(self, name):
            self.name = name
        def __add__(self, other):
            for x in range(1, len(self.name)):
                a = list(self.name)[-1 * x]
                return self.name[:len(self.name)-x] + chr(ord(a) + other)
    
    
    >>> CAA = MyClass('CAA')
    >>> CAA + 1
    'CAB'
    >>> CAA + 2
    'CAC'
    >>> CAA + 15
    'CAP'
    

    【讨论】:

    • “不那么整洁”?它有奇怪的,奇怪的问题。为什么return 在for 循环的中间有一个return?这将只执行一次“循环”并停止。没有实际的“循环”发生。这可以大大简化。
    • 另外,除非您使用的是 Python 3,否则请将其设为 object 的子类。
    【解决方案4】:

    这似乎是一个在 2020 年尚未失效的链接:https://svn.python.org/projects/python/trunk/Objects/stringobject.c

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多