2014-03-25 136 views
0

Python 3.x中有創建新類型的方法嗎?我只能找到在C++中做到這一點的方法。在python中創建一個新類型

基本上我想要做的是創建一個詞法分析器,其中我掃描輸入和python已經可以做int和字符串,但如果我想另一個數據類型如名稱,我怎麼可以分配它,以便我可以做.. 。

EX)

# This can be done 
>>> a = "string" 
>>> type(a) 
<class, 'str'> 

# How can I do this? 
>>> b = myName 
>>> type(myName) 
<class, 'name'> 
+4

[class declaration](http://docs.python.org/3/tutorial/classes.html)。或者你的意思是,你希望能夠使用字面值創建名稱對象,就像整數使用數字一樣,字符串使用引號,而字典使用大括號和冒號。我不認爲你可以修改語言的語法來添加這樣的新東西。 – Kevin

+1

請參閱PyParsing庫。它可以幫助你輕鬆和解析。 – IceArdor

+0

請參閱http://eli.thegreenplace.net/2012/03/30/python-objects-types-classes-and-instances-a-glossary/以瞭解類型和類別的區別。您可能想要使用類而不是實現新類型。 – dorvak

回答

6

你會想是這樣的,一個class。在源代碼中,您在Python中看到的所有對象類型都是class形式。

>>> class myName: 
...  def __init__(self, name): 
...   self.name = name 
...  def __str__(self): 
...   return self.name 
... 

>>> b = myName('John') 
>>> type(b) 
<class '__main__.myName'> 
>>> print(b) 
John 

原因輸出到您所期望的稍有不同是因爲class的名字是myName所以這就是由type()返回。此外,我們在class名稱之前獲得__main__.,因爲它位於當前模塊的本地。

+1

+1這是顯而易見的正確答案。你可以質疑它的失敗,「語言的設計者想把這個東西稱爲'類型'」,但這與問題的答案相比更具有缺陷。 – tripleee

+0

這幾乎完美!有沒有辦法讓類型myName而不是__main __。myname?還有一種將字符串轉換爲這種類型的方法嗎? EX)__main __。myName('Jack')像你可以int('4')? – user3324343

+0

不知道模塊的本地時間,但是做'type(b).__ name__'只會自己返回'myName'。你當然可以通過這種方式進行類型轉換,它的工作方式與builtins相同。例如'example ='bob'; a = myName(example)'就可以這樣工作。 –

-1

簡短的回答是你不能在沒有編輯源代碼(用C編寫)的情況下在python中創建一個新類型。

但是,關於在python中創建class的答案可能是更簡單的途徑,因爲編輯源代碼可能會與包創建兼容性問題(可能是說)。

相關問題