Python... feeding an instance as an argument into a new instance.

Chris Roberts thecjguy1 at gmail.com
Sat Sep 2 18:34:35 EDT 2017


Perhaps someone here could help me to get this into perspective. 
Somehow when we start to feed an instance as the argument in a new instance. my head explodes..
in this case...
a = Foo()
b = Bar(a)
So... 
 a is a 'Foo instance' with properties and methods. 
b is a 'Bar instance'
Since b is using the "a" instance as an argument?? 
b=Bar(a)  has what?? 

Is there an easier way to put into perspective how an instance of one class is used as the argument into the instance of another class? 

Code below: 

class Foo(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 #variable will be a property of "a" and self is the bound variable of a.

    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:
#a is Foo, a has a method called method, and properties such as "variable and bar".
# 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.
print "##Above is all the a Foo object, and below is the b Bar object"

class Bar(object):
    def __init__(self, arg):
        self.arg = arg
        self.Foo = Foo() #this calls and runs the Foo class again.


b = Bar(a)  #b is a Bar object, a is a Foo object with properties and methods. then Bar() calls the Foo class again.
b.arg.variable = "something"
print a.variable  # something !(I don't know why "a" prints "something" here.)
print b.Foo.variable  # Foo

####
OUTPUT: 
Foo Bar
Foo  Bar is now Baz
Foo
in method (args): 1 2
in method (attributes): bar  Bar is now Baz
in method (args): 1 2
in method (attributes): bar  Bar is now Baz
##Above is all the a Foo object, and below is the b Bar object
Foo Bar
Foo  Bar is now Baz
something
Foo

#### Thanks in advance... crzzy1 ...



More information about the Python-list mailing list