I’m fairly new to object oriented programming so some of the abstraction ideas are a little blurry to me. I’m writing an interpreter for an old game language. Part of this has made me need to implement custom types from said language and place them on a stack to be manipulated as needed.
Now, I can put a string on a list. I can put a number on a list, and I’ve even found I can put symbols on a list. But I’m a bit fuzzy on how I would put a custom object instance on a list when I can’t just drop it into a variable (since, after all, I don’t know how many there will be and can’t go about defining them by hand while the code is running 🙂
I’ve made a class for one of the simplest data types– a DBREF. The DBREF just contains a Database reference number. I can’t just use an integer, string, dictionary, etc, because there are type-checking mechanisms in the language I have to implement and that would confuse matters, since those are already used elsewhere in their closes analogues.
Here is my code and my reasoning behind it:
class dbref:
dbnumber=0
def __init__(self, number):
global number
dbnumber=number
def getdbref:
global number
return number
I create a class named dbref. All it does (for now) is take a number and store it in a variable. My hope is that if I were to do:
examplelist=[ dbref(5) ]
That the dbref object would be on the stack. Is that possible? Further, will I be able to do:
if typeof(examplelist[0]) is dbref:
print "It's a DBREF."
else:
print "Nope."
…or am I misunderstanding how Python classes work? Also, is my class definition wonky in any way?
If you used…
that would share the same number among all instances of the class, because
dbnumberwould be a class attribute, rather than an instance attribute. Try this instead:selfis a reference to the object instance itself that’s automatically passed by Python when you call one of the instance’s methods.