對於面向對象的編程,我很新,所以一些抽象的想法對我來說有點模糊。我正在爲舊的遊戲語言撰寫翻譯。部分原因使得我需要從所述語言實現自定義類型,並將它們放置在堆棧上以根據需要進行操縱。在列表中放置自定義類對象
現在,我可以把一個字符串放在列表中。我可以在列表中添加一個數字,我甚至發現我可以將符號放在列表中。但是我對如何將一個自定義對象實例放在一個列表中時有點模糊,因爲我不能將它放入一個變量中(因爲畢竟,我不知道會有多少,哪些不能當代碼正在運行時,請手動定義它們:)
我爲最簡單的數據類型之一--DBREF做了一個類。 DBREF只包含一個數據庫引用號。我不能只使用整數,字符串,字典等,因爲在我必須實現的語言中存在類型檢查機制,這會混淆事物,因爲這些機制已經在其他關係類似物中使用過。
這裏是我的代碼和我背後的推理:
class dbref:
dbnumber=0
def __init__(self, number):
global number
dbnumber=number
def getdbref:
global number
return number
我創建了一個名爲類DBREF。它所做的(現在)是取一個數字並將其存儲在一個變量中。我希望如果我這樣做:
examplelist=[ dbref(5) ]
dbref對象將在堆棧上。那可能嗎?此外,我將能夠做到:
if typeof(examplelist[0]) is dbref:
print "It's a DBREF."
else:
print "Nope."
......或者我誤解了Python類的工作方式?另外,我的班級定義是不是以任何方式?
在Python中,對象自動爲您管理對象生命週期,因此您不必擔心對象存儲在哪裏(順便說一句,所有對象都存儲在堆中)。與'typeof'等價的是'isinstance':'if isinstance(examplelist [0],dbref)'然而,你不應該那樣做,而是要利用鴨子打字來代替(只要與對象一起工作就好像它是一個'dbref')。 – 2012-03-06 20:47:22
與這個問題沒有關係,但是你幾乎總是希望避免Python中的'global',當你看到它時總是提出問題=) – 2012-03-06 21:04:25