目录
类的定义:
-
绑定方法:在类中定义的方法
-
类(Class): 用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。其中的对象被称作类的实例。
-
实例:也称对象。通过类定义的初始化方法,赋予具体的值,成为一个”有血有肉的实体”。
-
实例化:创建类的实例的过程或操作。
-
实例变量:定义在实例中的变量,只作用于当前实例。
-
类变量:类变量是所有实例公有的变量。类变量定义在类中,但在方法体之外。
-
数据成员:类变量、实例变量、方法、类方法、静态方法和属性等的统称。
-
方法:类中定义的函数。
-
静态方法:不需要实例化就可以由类执行的方法
-
类方法:类方法是将类本身作为对象进行操作的方法。
-
方法重写:如果从父类继承的方法不能满足子类的需求,可以对父类的方法进行改写,这个过程也称override。
-
封装:将内部实现包裹起来,对外透明,提供
api
接口进行调用的机制 -
继承:即一个派生类(derived class)继承父类(base class)的变量和方法。
-
多态:根据对象类型的不同以不同的方式进行处理。
类的实例化:
-
类名首字母大写
-
def __init__(self):
初始化函数 -
首先初始化实例的参数(属性)
-
import math class Circle: num = 1#所有属性公用的静态变量 def __init__(self,pai,r): self.pai = pai self.r = r def circumference(self): circle_circumference = self.r*self.pai*2 print('圆的周长保留两位小数后是%.2f'%circle_circumference) def area(self): circle_area = self.pai*self.r*self.r print('圆的面积保留两位小数后是%.2f'%(circle_area)) pai = math.pi circle = Circle(pai,3) circle.circumference() circle.area() #>>>圆的周长保留两位小数后是18.85 #>>>圆的面积保留两位小数后是28.27
-
类中的静态变量:
-
静态变量的修改:对象调用静态变量进行赋值是不能修改公共静态变量的值的
-
class Student: #对象初始化函数,在实例化对象之后,默认先执行Init函数 def __init__(self,name,s_class,s_course): self.name = name self.s_course = s_course self.s_class = s_class #类的绑定方法 def show_sinfo(self): print('{}本学期在{}班级学习{}课程'.format(self.name,self.s_class,self.s_course)) class Teacher: def __init__(self,name): self.name = name def show_tinfo(self): print('{}老师本学期授课'.format(self.name)) class Course: def __init__(self,course_teacher,name): self.course_teacher = course_teacher self.name = name def show_cinfo(self): print('{}课程本学期由{}老师教授'.format(self.name,self.course_teacher)) teacher_hua = Teacher('滑') teacher_xue = Teacher('薛') course_hua = Course('滑','python') course_xue = Course('薛','java') student_bai = Student('小明','2107',[course_hua,course_xue]) #输出学生小明本学期在2107班跟着滑老师学习python for i in student_bai.s_course: print('{}本学期跟随{}老师在{}班级学习{}课程'.format(student_bai.name,i.course_teacher,student_bai.s_class,i.name))
内存分析图:
-
开始执行py文件时,内存会首先开辟出已经创建好的类空间,类空间包含类中的绑定方法、约束属性
-
程序执行到实例(对象)时,会开辟实例的空间,此时类指针会指向其类
类的继承:
-
继承:把拥有相同属性和行为的内容(将重复的代码)提取到一个新的类
-
子类的初始化函数必须调用父类的初始化函数
init
-
super()在当前类的方法中代表的就是父类
-
继承关系的表示:类名A(类名B)
-
A继承了B,A是子类/派生类,B是父类/超类/基类
-
子类拥有父类的所有方法和属性,子类可以使用父类的静态变量,但是不能修改父类的静态变量
-
子类中拥有与父类同名的方法时,调用的是内存地址中最近的(就近原则)
-
父类中不想被子类继承的方法命名:
def __方法名()
-
代码:
#创建父类
class Animal:
#初始化对象,定义类中可调用的形式参数(属性)
#也是实例化该对象时,需传入的实际参数
def __init__(self,name,age,color,breed):
self.name = name
self.age = age
self.color = color
self.breed = breed
#定义类的绑定方法
def sleep(self):
print('{}需要睡觉'.format(self.name))
def eat(self):
print('{}需要吃粮'.format(self.name))
#定义一个名为Dog的类,继承自Animal,格式:class 类名(父类)
class Dog(Animal):
#初始化对象
def __init__(self,name,age,color,breed,job_name):
#通过super()继承父级的属性初始值,super()代表父类
super().__init__(name,age,color,breed)
self.job_name = job_name
def d_job(self):
print('{}的职责是{}'.format(self.name,self.job_name))
#方法重写:当父级方法无法满足子级需求时,可进行重写
def eat(self):
print('{}的工作是{},食物是狗粮'.format(self.name,self.job_name))
#实例化对象
dog = Dog('胖胖',3,'yellow','中华田园犬','看家陪玩')
dog.eat()
-
子类中的方法重写:
-
内存分析图(继承)
-
子类调用方法的寻找顺序:首先在子类的对象名称空间内寻找,找不到在类名称空间,再父级空间找