一、面向对象的概念:
1.1、面向对象是一种编程思想,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。
1.2、面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
二、类的定义(相当于多个函数集合的定义)
(一)、介绍
1、类(class):用来描述具有相同的属性和方法的对象的集合,定义了共有的属性和方法,对象时类的实例。
1.1、class关键词后是类名,通常首字母大写,且使用驼峰命名方法。
1.2、类名后面跟冒号:
1.3、类中通常包含一个特殊方法:__init__( )。(前后各两个英文下划线)
1.4、类中定义的每一个方法都有一个名为self的参数,该参数必须是方法的第一个参数,self表示当前对象,即指向调用方法的对象。
2、 方法(method):类中定义的函数。类的方法和普通函数的区别在于类方法必须有一个额外的第一个参数名称self。
3、 类变量:类变量在整个实例化的对象中时公用的,类变量定义在类中方法体之外,类变量通常不作为实例变量使用。
(二)、实例一:
定义一个矩形类,包含两个数据成员(属性参数):宽度和高度;该类提供两种方法(功能函数):求面积和周长
class Rectangle: #定义一个类 Rectangle,最后是 : 标志结束
def __init__(self,width,height): #定义初始化方法,三个参数,至少有self一个参数(形参)
self.width = width #定义参数变量属性(给实例属性赋值)
self.height = height
def getArea(self): #定义求面积getArea的方法
S = self.width*self.height
return S #返回S值
def getPerimeter(self): #定义求周长getPerimeter的方法
C = (self.width+self.height)*2
return C
二、创建类对象(相当于函数的调用)
基于类创建对象的语法:对象名=类名称()
依旧使用矩形类作介绍:
rect = Rectangle(10,20) #创建类对象rect
a = float(input('请输入矩形的宽a = ')) #从键盘上输入矩形的成员a、b
b = float(input('请输入矩形的高b = '))
rect = Rectangle(a,b) #创建类对象rect
print('该矩形的宽a = :',rect.width) #输出相应的对象成员和方法
print('该矩形的高b = :',rect.height)
print('该矩形的面积S = ',rect.getArea())
print('该矩形的周长C= ',rect.getPerimeter())
运行结果:
三、类的属性
1、实例属性:在定义初始化方法时,内部通过‘self.属性变量名’定义和访问的变量(在外部通过‘对象名.变量名’访问)
在__init__( )方法中进行初始化,语法为:
self . 变量名 = 实例属性值
2、类属性:在所有方法之外定义的属性(变量)
四、类的方法(函数)
1、定义:与类相关的函数,包括初始化函数和功能函数(方法)
2、类型:实例方法,类方法,静态方法
3、实例方法:至少包含一个对象参数,在内部通过‘self.方法()’调用,在外部通过‘对象名.方法()’调用
五、类的继承、重写与多态¶
1、继承:子类继承父类的方法
2、重写:子类可以重新编写子类的方法(方法名称相同)
3、多态:子类中方法名称相同但功能不同
4、示例如下:
#父类
class Person(): #定义一个人类
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def studying(self):
print(self.name,'正在图书馆学习中')
def show(self):
print('姓名:{}\n性别:{}\n年龄:{}\n'.format(self.name,self.sex,self.age))
#子类
class Student(Person): #定义一个Person的子类Student
def __init__(self,name,sex,age,major):
super().__init__(name,sex,age) #用内置函数super()继承父类(调用父类初始化函数)
'''
self.name = name
self.sex = sex
self.age = age
'''
self.major = major
def show(self):
Person.show(self) #在定义非初始化方法里面用父类名称Person.方法()继承父类
#super().show() 用super()内置方法重写show()不能再有属性self
print('专业:{}\n'.format(self.major))
#print('姓名:{}\n性别:{}\n年龄:{}\n专业:{}\n'.format(super().show(self),self.major))
#调用类
stu = Student('张三','男',20,'Python程序设计') #创建类对象
stu.studying()
stu.show()