-
Notifications
You must be signed in to change notification settings - Fork 0
/
OOP.py
129 lines (98 loc) · 3.28 KB
/
OOP.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
"""
OOP
"""
# ===类===
# class ClassName:
# <statement-1>
# .
# .
# <statement-N>
# ===类对象===
# 属性引用和实例化
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# ===实例化类===
x = MyClass()
# ===访问类的属性和方法===
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())
# 类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,像下面这样:
# __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上,self代表类的实例,而非类
def __init__(self):
self.data = []
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
# ===方法===
# def定义方法,与一般函数定义不同,类方法必须包含self参数且作为第一个参数,self代表类的实例
# 类定义
class people:
# 定义基本属性
name = ''
age = 0
# 定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
# 定义构造方法
def __init__(self, n, a, w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" % (self.name, self.age))
# 实例化类
p = people('runoob', 10, 30)
p.speak()
# ===继承===
# 子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。
# class DerivedClassName(BaseClassName):
# <statement-1>
# .
# .
# .
# <statement-N>
# ===多继承===
# class DerivedClassName(Base1, Base2, Base3):
# <statement-1>
# .
# .
# .
# <statement-N>
# 若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法
# ===方法重写===
class Parent: # 定义父类
def myMethod(self):
print('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print('调用子类方法')
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
super(Child, c).myMethod() # 用子类对象调用父类已被覆盖的方法
# ===类属性与方法===
# 类的私有属性
# __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
#
# 类的方法
# 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
# self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定使用 self。
#
# 类的私有方法
# __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。
# ==重载==
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self, other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2, 10)
v2 = Vector(5, -2)
print(v1 + v2)