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

 

posted @ 2022-11-27 19:35  Kruskal  阅读(13)  评论(0编辑  收藏  举报