四、面向对象编程
提纲:面向对象的基本思想
类与对象的关系
类的结构与成员
Python中的魔法函数
按功能要求完成类的设计与实例化对象
一切皆对象
BIFS:
type()返回数据类型
id()查看对象ID
dir() 查看对象下变量及函数
issubclass(), isinstance(), super(),类,实例,调父类
hasattr(), getattr(), setattr(),delattr(), 类属性
globals(), locals(), 全局与局部的名称空间
import(), reload(),模块的导入与重载
创建类:
class关键字
指定继承
定义类的成员
数据成员
类变量
实例对象
方法成员
类方法
实例对象
实例化类
类的创建与初始化
例子:
完成一个学生类的设计
能查看学生总人数,全部学生姓名,毕业分数标准,已经毕业学员数量
实现考试方法,成绩分数如果大于60分代表其通过考试,分数计入该学员总分
若该学员累计分数达到1000分钟,该学员即毕业
实现查分方法,向该学员返回是否已经毕业,或者还差多少分数才能毕业
实现查询所有已毕业学生数量的功能
实现查询所有学生数量的功能
实现查询所有学生姓名的功能
class Student():
student_total=0
student_list=[]
student_graduated=0
pass_score=1000
def __init__(self,name,age,gender):
self.name=name
self.age=age
self.genger=gender
self.score=0
Student.student_total+=1
Student.student_list.append(name)
def exam(self,score):
if score<60:
return 'failed'
else:
self.score+=score
str1='good, your score is now '+str(self.score)
if self.score>=Student.pass_score:
Student.student_graduated+=1
return str1
#david=Student('david',22,'male')
#type(david)
def check(self,): #只要是对象的方法,都要以self开头
if self.score<Student.pass_score:
return 'you have',Student.pass_score-self.score,'to achieve'
else:
return 'you have graduated'
@classmethod
def get_student_graduated(cls,): #cls ?
return Student.student_graduated
@classmethod
def get_student_total(cls,): #cls ?
return Student.get_student_total
@classmethod
def get_student_list(cls,): #cls ?
return Student.get_student_list
@staticmethod
def static1():
return'this is a static method form Student,it is can be called by both the class and the instance'
xiaoming=Student('xiaoming',22,'male')
xiaoming=Student('ximing',22,'male')
Student.get_student_list()
#有问题,未达到预期的效果
静态方法(普通方法):
定义的时候使用@staticmethod装饰器
静态方法没有参数限制,不需要实例参数self和类参数cls cls是class的简写
静态法可以通过类名访问,或者实例访问
私有控制 双下划线 "__"
魔术方法
如果对象实现(重载)了这些方法中的某一个,那么错方法就会在特殊的情况下被Python所调用,
定义自己想要的行为,这些会自动发生。
经常是两个下划线包围来命名的。
如:__init__
当x=myclass的时候,__init__并不是第一个被调用的方法
还有一个叫__new__的方法,来构造这个函数,同样,结束时也有一个 __del___方法
class myclass():
def __init__(self,):
print('被__init__')
def __del__(self,):
print('被__del__')
cl=myclass()
del cl
作业:
完成简单类的设计
新建类并修改其实例的切片访问