Python_15面向对象

一、面向对象概念和基本语法
  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

二、类的创建及调用

1、创建类
使用 class 关键字来创建一个新类,class 之后为类的名称()并以冒号结尾:

 1 #第五章面向对象概念和基本语法
 2 class People():
 3     def __init__(self,name,age,sex): #__init__方法在Python面向对象编程中,称为构造方法,也称为初始化方法
 4         self.name = name
 5         self.age = age
 6         self.sex = sex
 7     def collecting(self,money):
 8         print(self.name+'本次收银: $'+str(money))
 9 
10 bulanni = People('布兰尼',35,'')  #创建实例对象语法
11 print(bulanni.name)            #对象可以包含属性
12 print(bulanni.age)
13 print(bulanni.sex)
14 bulanni.collecting(500)        #对象里面可以包含方法

2、创建对象及方法相关

 1 #第五章面向对象方法相关2022.08.14周日PM
 2 class People():       #人类==看成是一个对象
 3     "创建一个人类对象,需要传4个参数"     #备注信息,类的说明
 4     name = '' #类属性
 5     def __init__(self,name,age,): #__init__方法在Python面向对象编程中,称为构造方法,也称为初始化方法
 6         print('对象创建之前时候执行')
 7         self.name = name #实例属性
 8         self.age = age
 9 
10     def __del__(self):             #析构方法,在释放对象时调用,支持重载,可以在里面进行一些释放资源的操作,不需要显示调用
11         pass                       #pass主要作用就是占位,让代码整体完整
12         # print('对象释放之后执行')
13 
14     def __str__(self):             #自定义实例输出方法
15         return 'hello world'
16 
17     def __add__(self,other):       #两个实例的加法操作
18         return self.age +other.age
19 
20 bulanni = People('布兰尼',35)  #创建实例对象语法
21 print('hello')
22 # del bulanni
23 print('hello')
24 print(bulanni)
25 print(bulanni.name)
26 print(bulanni.__getattribute__('name')) #获取实例属性的值,可直接结合对象使用
27 xiaowei = People('小卫',28)
28 print(bulanni.age + xiaowei.age)   #对象相加,调用系统的 __add

3、__init__函数
我们必须先了解内置的 __init__()函数。
所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。
使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:

 1 #第五章面向对象概念和基本语法
 2 class People():
 3     def __init__(self,name,age,sex): #__init__方法在Python面向对象编程中,称为构造方法,也称为初始化方法
 4         self.name = name
 5         self.age = age
 6         self.sex = sex
 7     def collecting(self,money):
 8         print(self.name+'本次收银: $'+str(money))
 9 
10 bulanni = People('布兰尼',35,'')  #创建实例对象语法
11 print(bulanni.name)            #对象可以包含属性
12 print(bulanni.age)
13 print(bulanni.sex)
14 bulanni.collecting(500)        #对象里面可以包含方法

4、对象方法
对象也可以包含方法。对象中的方法是属于该对象的函数。

 1 class Person:
 2   def __init__(self, name, age):
 3     self.name = name
 4     self.age = age
 5 
 6   def myfunc(self):
 7     print("Hello my name is " + self.name)
 8 
 9 p1 = Person("Bill", 63)
10 p1.myfunc()

5、self参数
self 参数是对类的当前实例的引用,用于访问属于该类的变量。
它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数:

 1 class Person:
 2   def __init__(mysillyobject, name, age):
 3     mysillyobject.name = name
 4     mysillyobject.age = age
 5 
 6   def myfunc(abc):
 7     print("Hello my name is " + abc.name)
 8 
 9 p1 = Person("Bill", 63)
10 p1.myfunc()

三、面向对象的三大特性

三大特性包括:
封装
继承
多态

1、封装
对于私有的属性,不能被外界使用,但不可避免的要被访问和修改,我们就提供一些方法进行修改和对外访问接口,这种方式叫做封装 - 将变化隔离 - 提高复用性 - 提高安全性。

 1 class People():
 2     def __init__(self,name,age):
 3         self.__name = name
 4         self.__age = age
 5 
 6     def getName(self):      #方法封装
 7         return self.__name
 8 
 9     def setName(self,n):
10         self.__name = n
11 
12 bulanni = People('布兰妮',28)
13 print(bulanni._People__name)  #数据封装
14 bulanni.setName('勒布朗')
15 print(bulanni.getName())   #方法封装

2、继承
继承允许我们定义继承另一个类的所有方法和属性的类。
父类是继承的类,也称为基类。
子类是从另一个类继承的类,也称为派生类。

 1 #继承基础02
 2 class People():
 3     def __init__(self,name,age):
 4         self.name = name
 5         self.age = age
 6     def say(self,content):
 7         print(self.name+'说:'+content)
 8 
 9 class Student(People): #写上父类名字
10     def __init__(self,name,age,grade):
11         People.__init__(self,name,age) #字父类都存在构造关系时,子类必须显示的调用父类的构造方法
12 
13         self.grade = grade
14     def study(self,course):
15         print(self.name+' 学习:'+course)
16 
17 bulanni = People('布兰尼',28)
18 bulanni.say('各位好')
19 xiaoming = Student('小明',12,'六年级')
20 print(xiaoming.name)
21 xiaoming.say('你好!')
22 xiaoming.study('数学')
23 print(isinstance(bulanni,People))  #判断对象是否属于后面的类
24 print(isinstance(xiaoming,People))
25 print(issubclass(Student,People))  #判断子类是否属于父类

3、多态
Java中多态性,可以理解为一个事物的多种形态,比如我们说猫是动物、猫也是猫,猫就具备了不同的形态。同样python中也支持多态,但是是有限的的支持多态性,
主要是因为python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时python不支持重载。

 1 #面向抽象,多态2022.07.17PM
 2 from abc import ABCMeta,abstractmethod
 3 
 4 class File(metaclass=ABCMeta):
 5     @abstractmethod
 6     def doubleClick(self):   #抽象方法不包含任何实现
 7         pass
 8 
 9 class TxtFile(File):
10     def doubleClick(self):   #子类继承了抽象类,就必须实现抽象类的抽象方法
11         print('打开txt文件')
12 
13 class ExeFile(File):
14     def doubleClick(self):
15         print('执行exe文件')
16 
17 class VideoFile(File):
18     def doubleClick(self):
19         print('播放视频文件')
20 
21 def open(fileObject):    #多态性,传不同的对象,执行不同的方法
22     fileObject.doubleClick()
23 
24 txtFile = TxtFile();exeFile = ExeFile();videoFile = VideoFile()
25 open(txtFile)   #多态性
posted @ 2022-08-31 14:37  TesterWei  阅读(49)  评论(0编辑  收藏  举报