2010-09-29 25 views
11

我正在研究爲某個字符串重載+運算符,所以我在考慮子類化字符串類,然後在新類中添加代碼。然而,我想先看看標準的字符串類,但我似乎無法找到它......愚蠢的呃?python字符串類在源代碼中的位置

任何人都可以指路嗎?即使在線文檔的源代碼。

+0

它可以是C Extention,並內建類型,所以我認爲它無法打開代碼爲.py文件你在想什麼。 – shahjapan 2010-09-29 10:06:18

+0

「我正在研究爲某個字符串重載'+'運算符」。在任何情況下,「超載」「某個字符串」都不是明智的。你可能需要一個新的類對象完全適用於字符串。你應該提供更多的信息,因爲你描述的內容沒有多大意義。 – 2010-09-29 11:45:43

+0

以及具體的情況是重載字符串,以便當我添加使用__add__方法與數字類型(int,浮動等),它將'增加'到相應的字母。例如'A'+ 2 ='C'。然而,因爲我以前從未做過任何類型的重載,我也對運營商在一般意義上超載的方式感興趣,而不僅僅是在這種特殊情況下。 – momo 2010-09-29 14:43:55

回答

6

它記錄在here。主要實現在Objects/stringobject.c。儘管子類str可能不是你想要的。我傾向於喜歡作文。有一個字符串字段的對象和特殊行爲。

+1

現在鏈接已死。請參閱https://svn.python.org/projects/python/trunk/Objects/stringobject.c – 2017-09-04 22:13:11

+0

並且...鏈接再次死亡。我猜測源代碼現在位於['Objects/unicodeobject.c'](https://github.com/python/cpython/blob/master/Objects/unicodeobject.c)中的Github上。 – Delgan 2017-11-14 21:01:07

0

你可能是這個意思。

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' 
0

我的實現是相似的,雖然不是整齊:

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' 
+0

「不夠整潔」?它有奇怪的,奇怪的問題。爲什麼在'for'循環的中間有'return'?這將執行一次「循環」並停止。沒有實際的「循環」進行。這可以大大簡化。 – 2010-09-29 21:50:46

+0

另外,除非你使用Python 3,請將它作爲'object'的一個子類。 – 2010-09-29 21:51:24

相關問題