Python中所有的东西都能是对象,数据加函数就是对象,对象的集合就是类,比如下面的一段,学生就是类,可以通过一系列的函数来定义一个学生,类的创建会自动分配一个储存空间,这时候print会返回目标地址
class Student:
def study(self, course_name):
print(f'学生正在学习{course_name}.')
def play(self):
print(f'学生正在玩游戏.')
但是这个类里面只有方法,study和play,没有属性,我们通过_init_格式化class的空间并赋予初值
class Student:
"""学生"""
def __init__(self, name, age):
"""初始化方法"""
self.name = name
self.age = age
def study(self, course_name):
"""学习"""
print(f'{self.name}正在学习{course_name}.')
def play(self):
"""玩耍"""
print(f'{self.name}正在玩游戏.')
def __repr__(self):
return f'{self.name}: {self.age}'
_repr_称为魔术方法,print时候会显示内容
类的调用有两种,Student.study(stu1,"Python")
stu1.study(''Python)
封装 继承 多态
封装
隐藏一切可以隐藏的实现细节,只向外界暴露简单的调用接口。
我们在类中定义的对象方法其实就是一种封装
这种封装可以让我们在创建对象之后,只需要给对象发送一个消息就可以执行方法中的代码,也就是说我们在只知道方法的名字和参数(方法的外部视图),不知道方法内部实现细节(方法的内部视图)的情况下就完成了对方法的使用。
封装其实就是def 函数,然后调用,这样就看不到内部细节
面向对象编程的三步走
第一步定义类,第二步创建对象,第三步给对象发消息。
类是抽象的,对象是具体的,有了类就能创建对象,有了对象就可以接收消息,这就是面向对象编程的基础。
继承
继承就是子类调用父类,可以看成函数调用函数,就是嵌套继承
多态
子类继承父类的方法后,还可以对方法进行重写(重新实现该方法),不同的子类可以对父类的同一个方法给出不同的实现版本,这样的方法在程序运行时就会表现出多态行为(调用相同的方法,做了不同的事情)。
简单地说就是,同种调用有不同的实现方法
重写就是子类对父类已有的方法重新做出实现。相信大家已经注意到了,三个子类中的get_salary各不相同,所以这个方法在程序运行时会产生多态行为,多态简单的说就是调用相同的方法,不同的子类对象做不同的事情。