forked from HaoZhang95/Python24
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic02.py
More file actions
67 lines (51 loc) · 2.09 KB
/
basic02.py
File metadata and controls
67 lines (51 loc) · 2.09 KB
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
"""
单继承,class B(A) 括号里面的是相对B来说的B的父类,集成了A的属性和方法
1- python中类的属性是直接写在init方法中的
"""
class A(object):
def __init__(self):
self.num = 10
def print_num(self):
print(self.num + 10)
class B(A):
def my_func(self):
print("我自己B类的自定义方法")
b = B()
print(b.num)
b.print_num()
b.my_func()
"""
多继承class D(C, A),如果多个父类C,A中都含有相同的方法和属性print_num那么子类D继承的是就是C的,注意继承的先后顺序
1- 父类中的属性和方法如果相同的话,会继承第一个父类的属性和方法,按照集成的顺序走init构造方法
2- D类中重写父类的方法,如果自己d类中重写了init方法,那么就不会继承任何的父类属性从init方法中
3- 换句话,子类重写了父类的方法,那么不在使用父类同名的方法,包括init构造方法
4- 子类中重写了父类的方法但是还是想调用父类的方法,
"""
class C(object):
def __init__(self):
self.num = 28
def print_num(self):
print(self.num + 10)
class D(C, A):
def __init__(self):
self.age = "这是D类自己的属性age"
self.num = "这是D类重写父类的属性num"
def print_num(self):
self.__init__() # 再将self.num更改回来
print("这是D自己重写父类的方法")
# 但是子类还是想使用**父类的属性**调用父类重名的print_num方法
# 使用A.__init__(self)方法来更改self.num的值
def print_a_num(self):
print(d.num) # 本来D对象中self.num = "这是D类重写父类的属性num"
A.__init__(self) # 把self传进去,当前的self.num = 10
A.print_num(self)
# 或者使用super在子类方法中调用父类的方法
def print_c_num(self):
# super(D, self).print_num() 或者下面的简写形式
super().print_num()
def my_func(self):
print("我自己D类的自定义方法")
d = D()
d.print_a_num()
print(d.num)
d.print_num()