Python面向对象
0 相关术语介绍
类:用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。其中对象指的是类的实例。比如动物是一个对所有动物的总称,所有动物皆由细胞所构成,那么动物就是一个类。
类变量:类变量在整个实例化对象中是公用的,定义在类中且在函数体之外,通常不作为实例变量使用。
方法重写:对继承父类的方法进行改写。
实例变量:用于表示属性的变量。
实例化:创建一个类的实例。
数据成员:类变量或者实例变量。
方法:类中定义的函数。
局部变量:定义在方法中的变量。
对象(通俗来说就是一个模板):对象包括两个数据成员(类变量和实例变量)和方法
继承:派生类继承基类的属性和方法。例如一个Dog类是从Animal类中派生出来的,Dog类可以使用Animal类的属性和方法。
1 创建类
1 class 类名:
2 ‘类的帮助信息’ # 可通过 类名.__doc__查看
3 class_suite # 类体:由类成员、方法、属性组成
2 实例
1 class Employee:
2 '所有员工的基类' # 类文档字符串:可通过类名.__doc__查看
3 employee_count = 0 # 类变量:在整个实例化的对象中是公用的,定义在类中,且在函数体之外,通常不作为实例变量使用
4
5 def __init__(self, name, salary): # __init__:初始化,强制绑定属性, self:指向创建的实例本身
6 self.name = name
7 self.salary = salary
8 Employee.employee_count += 1
9
10 def display_count(self):
11 print("Total Employee %d" % Employee.employee_count)
12
13 def display_employee(self):
14 print("Name:",self.name, "Salary:", self.salary)
15
16 # 创建Employee类的第一个对象
17 employee1 = Employee("Bob", 2000)
18
19 # 创建Employee类的第二个对象
20 employee2 = Employee("Alice", 5000)
21
22 # 访问属性:使用.来访问对象的属性
23 employee1.display_employee()
24 employee2.display_employee()
25
26 print("Total Employee %d" % Employee.employee_count)
代码输出结果:
添加,删除,修改类的属性:
1 employee1.age = 7 # 添加一个 'age' 属性
2 employee2.age = 8 # 修改 'age' 属性
3 del employee1.age # 删除 'age' 属性
使用以下函数的方式来访问属性:
- getattr(obj, name[, default]) : 访问对象的属性。
- hasattr(obj,name) : 检查是否存在一个属性。
- setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
- delattr(obj, name) : 删除属性。
1 hasattr(employee1, 'age') # 如果存在 'age' 属性返回 True。
2 getattr(employee1, 'age') # 返回 'age' 属性的值
3 setattr(employee1, 'age', 8) # 添加属性 'age' 值为 8
4 delattr(employee1, 'age') # 删除属性 'age'
3 Python内置属性
1 class Employee: 2 '所有员工的基类' # 类文档字符串:可通过类名.__doc__查看 3 employee_count = 0 # 类变量:在整个实例化的对象中是公用的,定义在类中,且在函数体之外,通常不作为实例变量使用 4 5 def __init__(self, name, salary): # __init__:初始化,强制绑定属性, self:指向创建的实例本身 6 self.name = name 7 self.salary = salary 8 Employee.employee_count += 1 9 10 def display_count(self): 11 print("Total Employee %d" % Employee.employee_count) 12 13 def display_employee(self): 14 print("Name:",self.name, "Salary:", self.salary) 15 16 print("Employee.__doc__:", Employee.__doc__) # 类的文档字符串 17 print("Employee.__name__:", Employee.__name__) # 类名 18 print("Employee.__module__:", Employee.__module__) # 类定义所在的模块 19 print("Employee.__bases__:", Employee.__bases__) # 类的所有父类,由元组构成 20 print("Employee.__dict__:", Employee.__dict__) # 类的属性,由一个字典构成
代码输出结果如下:
4 类的继承
类的继承本质上来说就是代码复用。
1 # 定义父类
2 class Parent:
3 parent_attr = 100
4 def __init__(self):
5 print("调用父类的构造函数")
6
7 def parent_method(self):
8 print("调用父类方法")
9
10 def parent_setattr(self, attr):
11 Parent.parent_attr = attr
12
13 def parent_getattr(self):
14 print("父类属性:",Parent.parent_attr)
15
16 # 定义子类
17 class Child(Parent):
18 def __init__(self):
19 print("调用子类构造方法")
20
21 def child_method(self):
22 print("调用子类方法")
23
24 # 实例化子类
25 c = Child()
26
27 # 调用子类方法
28 c.child_method()
29
30 # 调用父类方法
31 c.parent_method()
32
33 # 调用父类方法并获取属性值
34 c.parent_getattr()
35
36 # 调用父类方法并设置属性值
37 c.parent_setattr(200)
38
39 # 调用父类方法并获取更改后的属性值
40 c.parent_getattr()
代码运行结果如下:
5 参考资料
https://www.runoob.com/python/python-object.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017495723838528
https://mofanpy.com/tutorials/python-basic/interactive-python/class
作者:kali
-------------------------------------------
个性签名:纸上学来终觉浅,绝知此事要躬行。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!