Python User-defined method objects may be created when getting an attribute of a class , if that attribute is a user-defined function object.
Python User-defined method: Creating user-defined method objects
User-defined method objects may be created when getting an attribute of a class (perhaps via an instance of that class), if that attribute is a user-defined function object, an unbound user-defined method object, or a class method object.
func: A user-defined function object
Note that func is a function object when it's defined,
and an unbound method object when it's retrieved.
classMethod: A class method @classmethod
def classMethod(self): pass
unboundMeth: A unbound user-defined method object
Parent.func is an unbound user-defined method object here,
because it's retrieved.
unboundMeth = A.func
a = A()
b = B()
output: print a.func
output: > print B.unboundMeth
output: print A.classMethod
output: > print a.classMethod
When the attribute is a user-defined method object, a new method object is only created if the class from which it is being retrieved is the same as, or a derived class of, the class stored in the original method object; otherwise, the original method object is used as it is.
Parent: The class stored in the original method object class Parent(object): func: The underlying function of original method object def func(self): pass func2 = func Child: A derived class of Parent class Child(Parent): func = Parent.func
AnotherClass: A different class, neither subclasses nor subclassed class AnotherClass(object):
func = Parent.func
print Parent.func is Parent.func # False, new object created
print Parent.func2 is Parent.func2 # False, new object created
print Child.func is Child.func # False, new object created
print AnotherClass.func is AnotherClass.func # True, original object used
Section 101.2: Turtle example
The following is an example of using an user-defined function to be called multiple(∞) times in a script with ease.
import turtle, time, random #tell python we need 3 different modules turtle.speed(0) #set draw speed to the fastest turtle.colormode(255) #special colormode
turtle.pensize(4) #size of the lines that will be drawn
def triangle(size): #This is our own function, in the parenthesis is a variable we have defined that will be used in THIS FUNCTION ONLY. This fucntion creates a right triangle
turtle.forward(size) #to begin this function we go forward, the amount to go forward by is the variable size
turtle.right(90) #turn right by 90 degree
turtle.forward(size) #go forward, again with variable turtle.right(135) #turn right again
turtle.forward(size * 1.5) #close the triangle. thanks to the Pythagorean theorem we know that this line must be 1.5 times longer than the other two(if they are equal) while(1): #INFINITE LOOP
turtle.setpos(random.randint(-200, 200), random.randint(-200, 200)) #set the draw point to a random (x,y) position
turtle.pencolor(random.randint(1, 255), random.randint(1, 255), random.randint(1, 255)) #randomize the RGB color
triangle(random.randint(5, 55)) #use our function, because it has only one variable we can simply put a value in the parenthesis. The value that will be sent will be random between 5 - 55, end the end it really just changes ow big the triangle is.
turtle.pencolor(random.randint(1, 255), random.randint(1, 255), random.randint(1, 255)) #randomize color again