代码改变世界

Python - 面向对象

2022-03-09 14:39  起个昵称  阅读(19)  评论(0编辑  收藏  举报
"""
面向对象编程的主要特点:
多态:不同类的对象对同一消息会做出不同的响应
封装:对外部世界隐藏对象的工作细节
继承:以已有的类为基础建立专门的类对象

函数
方法:和实例绑定的函数称之为方法
"""

 

示例代码:

 1 class Aclass():
 2 
 3     a = '类变量a,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用 Aclass.a 访问'
 4     __aa = '类私有属性'
 5 
 6     def __init__(self,b):
 7         print('_init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法')
 8         self.b = b   # 实例化类时传入参数b,即传给self.b
 9         self.d = Aclass.a   # 把类变量的值传给变量d
10 
11     def cls_func_1(self):
12         c = '局部变量c'
13         print("这是类的方法")
14         print(f"c: {c}")
15         print(f'Aclass.a:{Aclass.a}')
16         print(f'self.b:{self.b}')
17 
18     def __cls_func_2(self):
19         print("类私有属性方法")
20 
21 
22 def func1():
23     print("这是普通的函数")
24     print(f"类外部访问类变量a: {Aclass.a}")
25 
26 
27 # 实例化类 - 对象
28 cls = Aclass(100)  # 类里传入的参数其实就是__init__()参数

对象:如代码,cls就是Aclass类实例化后的具体对象

 

面向对象的作用:把程序进行封装、方便重复利用,提高效率。

 

继承示例:

 1 class Aclass():
 2 
 3     a = '类变量a,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用 Aclass.a 访问'
 4     __aa = '类私有属性'
 5 
 6     def __init__(self,b):
 7         print('_init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法')
 8         self.b = b   # 实例化类时传入参数b,即传给self.b
 9         self.d = Aclass.a   # 把类变量的值传给变量d
10 
11     def cls_func_1(self):
12         c = '局部变量c'
13         print("这是类的方法")
14         print(f"c: {c}")
15         print(f'Aclass.a:{Aclass.a}')
16         print(f'self.b:{self.b}')
17 
18 
19 class Bclass(Aclass):
20     
21     def __init__(self,b):
22         super().__init__(b)
23 
24 cls = Bclass(100)
25 cls.cls_func_1() 

Bclass类继承了Aclass类所有,可以直接使用Aclass类的属性、方法

可以继承多个类,如Bclass(Aclass, Cclass, Dclass)

 

重写示例:

 1 class Aclass():
 2 
 3     a = '类变量a,它的值将在这个类的所有实例之间共享。可以在内部类或外部类使用 Aclass.a 访问'
 4     __aa = '类私有属性'
 5 
 6     def __init__(self,b):
 7         print('_init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法')
 8         self.b = b   # 实例化类时传入参数b,即传给self.b
 9         self.d = Aclass.a   # 把类变量的值传给变量d
10 
11     def cls_func_1(self):
12         c = '局部变量c'
13         print("这是类的方法")
14         print(f"c: {c}")
15         print(f'Aclass.a:{Aclass.a}')
16         print(f'self.b:{self.b}')
17 
18 
19 class Bclass(Aclass):
20 
21     def __init__(self,b):
22         print('重写了__init__')
23         self.b = b
24 
25     def cls_func_1(self):
26         print('重写Aclsss类的cls_func_1()方法,当Bclass调用cls_func_1方法时,就是这个,不再是Aclass的l')

上面代码重写了__init__方法和cls_func_1方法

 

多态示例:

 

 1 # ************* 多态 *************
 2 class Animal():
 3     def __init__(self, name):
 4         self.name = name
 5 
 6     def sound(self):
 7         print(f'{self.name}\'s sound')
 8 
 9 class Dog(Animal):
10     def sound(self):
11         print('wang')
12 
13 class Cat(Animal):
14     def sound(self):
15         print('miao')
16 
17 def hello(animal):
18     animal.sound()
19 
20 dog = Dog('dog')
21 hello(dog)
22 
23 cat = Cat('cat')
24 hello(cat)
25 
26 #cat 和 dog 是两个不同的对象,对它们调用同个方法,它们会自动调用实际类型的sound方法,作出不同的响应。这就是多态的魅力。