Passing variables, creating instances, self, The mechanics and usage of classes: need explanation
call, class, instance-variables, parameter-passing, python
Solution
class Foo (object):
# ^class name #^ inherits from object
bar = "Bar" #Class attribute.
def __init__(self):
# #^ The first variable is the class instance in methods.
# # This is called "self" by convention, but could be any name you want.
#^ double underscore (dunder) methods are usually special. This one
# gets called immediately after a new instance is created.
self.variable = "Foo" #instance attribute.
print self.variable, self.bar #<---self.bar references class attribute
self.bar = " Bar is now Baz" #<---self.bar is now an instance attribute
print self.variable, self.bar
def method(self, arg1, arg2):
#This method has arguments. You would call it like this: instance.method(1, 2)
print "in method (args):", arg1, arg2
print "in method (attributes):", self.variable, self.bar
a = Foo() # this calls __init__ (indirectly), output:
# Foo bar
# Foo Bar is now Baz
print a.variable # Foo
a.variable = "bar"
a.method(1, 2) # output:
# in method (args): 1 2
# in method (attributes): bar Bar is now Baz
Foo.method(a, 1, 2) #<--- Same as a.method(1, 2). This makes it a little more explicit what the argument "self" actually is.
class Bar(object):
def __init__(self, arg):
self.arg = arg
self.Foo = Foo()
b = Bar(a)
b.arg.variable = "something"
print a.variable # something
print b.Foo.variable # Foo
Problem
I just rewrote a working program into functions in a class and everything messed up. First, in the `__init__` section of the class I declared a bunch of variables with `self.variable=something`. Should I be able to access/modify these variables in every function of the class by using `self.variable` in that function? In other words, by declaring `self.variable` I have made these variables, global variables in the scope of the class right? If not, how do I handle self? Second, how do I correctly pass arguments to the class? Third, how do I call a function of the class outside of the class scope? Fouth, how do I create an Instance of the `class INITIALCLASS` in another `class OTHERCLASS`, passing variables from `OTHERCLASS` to `INITIALCLASS`? I want to call a function from `OTHERCLASS` with arguments from `INITIALCLASS`. What I've done so far is. ``` class OTHERCLASS(): def __init__(self,variable1,variable2,variable3): self.variable1=variable1 self.variable2=variable2 self.variable3=variable3 def someotherfunction(self): something=somecode(using self.variable3) self.variable2.append(something) print self.variable2 def somemorefunctions(self): self.variable2.append(variable1) class INITIALCLASS(): def __init__(self): self.variable1=value1 self.variable2=[] self.variable3='' self.DoIt=OTHERCLASS(variable1,variable2,variable3) def somefunction(self): variable3=Somecode #tried this self.DoIt.someotherfunctions() #and this DoIt.someotherfunctions() ``` I clearly didn't understand how to pass variables to classes or how to handle `self`, when to use it and when not. I probably also didn't understand how to properly create an instance of a class. In general I didn't understand the mechanics of classes so please help me and explain it to me like I have no idea (which I don't, it seems). Or point me to a thorough video, or readable tutorial. All I find on the web is super simple examples, that didn't help me much. Or just very short definitions of classes and class methods instances etc. I can send you my original code if you guys want, but its quite long.