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) #多态性
原创不易,转载请说明出处http://www.cnblogs.com/yyym 谢谢!