我对面向对象编程相当新,所以一些抽象概念对我来说有点模糊。我正在为一种旧的游戏语言编写翻译。部分原因是我需要从所述语言实现自定义类型并将它们放在堆栈中以根据需要进行操作。
现在,我可以在列表中放置一个字符串。我可以在列表上放一个数字,我甚至发现我可以将符号放在列表中。但是当我不能将一个自定义对象实例放到一个变量中时,我会有点模糊,因为毕竟,我不知道有多少会有,也不会在代码运行时,手动定义它们:)
我为一种最简单的数据类型 - 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类的工作原理?另外,我的班级定义是否以任何方式变得难以理解?
答案 0 :(得分:1)
如果你用过......
class dbref:
dbnumber=0
将在类的所有实例中共享相同的数字,因为dbnumber
将是类属性,而不是实例属性。试试这个:
class dbref(object):
def __init__(self, number):
self.dbnumber = number
def getdbref(self):
return self.dbnumber
self
是对对象实例本身的引用,当您调用其中一个实例的方法时,它会被Python自动传递。