-
Notifications
You must be signed in to change notification settings - Fork 0
/
Chapter-101.py
93 lines (79 loc) · 3.7 KB
/
Chapter-101.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""
Chapter 101: User-Defined Methods
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.
Section 101.2: Turtle example
"""
class A(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.
def func(self):
pass
# classMethod: A class method
@classmethod
def classMethod(self):
pass
class B(object):
# 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()
print("-----")
print(A.func)
# output: <unbound method A.func>
print(a.func)
# output: <bound method A.func of <__main__.A object at 0x10e9ab910>>
print(B.unboundMeth)
# output: <unbound method A.func>
print(b.unboundMeth)
# output: <unbound method A.func>
print( A.classMethod)
# output: <bound method type.classMethod of <class '__main__.A'>>
print(a.classMethod)
# output: <bound method type.classMethod of <class '__main__.A'>>
"""
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
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