(一)面向对象的介绍
描述一个人的行为和信息很容易,但是代码通常是处理大量数据,这个时候如果使用相同的变量名肯定会冲突,使用不同的变量名又会很麻烦,同时其他人也不容易知道定义了哪些内容。这时我们就可以借鉴函数封装的思想,再次对函数和变量进行封装,来提高代码的复用性。通过这样的封装把与人相关的变量放在一起,只要找到这个部分代码,就能知道关于人定义了哪些变量和函数。通常我们把用关键字class
定义的代码块称为类。在类里的变量称为类的属性,类里的函数称为类的方法。
(二)类的定义和使用
def定义函数,class定义类,在定义类时首字母大写(规范是这样,不大写也可以)。
使用时是通过对象.属性----对象.方法()
class Person:
def __init__(self, name,age,sex): #__int__初始化方法,进行共同属性的初始化赋值
self.name = name #self代表实例对象本身
self.age = age
self.sex = sex
def play(self): #在类里面每一个方法都要有self,因为要知道是谁在使用这个方法
print(f'{self.name}在看书')
zs = Person('张三',18,'男')
ls = Person('李四',20,'女')
这里如果我们想要提前对某一对象进行删除,可以用到析构方法。
class Person:
def __init__(self, name,age,sex): #__int__初始化方法,进行共同属性的初始化赋值
self.name = name #self代表实例对象本身
self.age = age
self.sex = sex
def play(self):
print(f'{self.name}在看书')
def __del__(self): #析构方法,对象被删除时自动调用,释放内存空间
print(f'{self.name}已经被删除')
#双下划线定义的方法叫做魔法方法,在特定场景使用
zs = Person('张三',18,'男')
ls = Person('李四',20,'女')
当然析构方法不定义也可以进行使用,只不过自己定义后会根据自己的设定进行提示。
(三)继承与多继承
(1)继承
继承是子类继承父类,可以拥有父类所有属性和方法。
class Person:
a = '人类' #直接定义在类里面的变量,没有赋值给实例对象的就是类属性。
def __init__(self, name,age,sex):
self.name = name
self.age = age
self.sex = sex
def hobby(self):
print('所有人都有爱好')
class boy(Person):
a = '男生'
def hobby(self): #重写 子类重写父类的方法
print(f'{self.name}是男生,喜欢rap,篮球')
class girl(Person):
a = '女生'
def hobby(self):
print(f'{self.name}是女生,喜欢唱跳')
zs = boy('张三',18,'男')
ls = girl('李四',20,'女')
在继承的基础上可以有自己的方法。如果想要继续使用父类的方法功能可以使用super().方法()
class boy(Person):
a = '男生'
def hobby(self): #重写 子类重写父类的方法
super().hobby() #重写父类方法后还想要使用父类方法的功能
print(f'{self.name}是男生,喜欢rap,篮球')
(2)多继承
多继承使用super().方法()
时要注意继承顺序。通过类.mro()
查询继承顺序。
class Person:
a = '人类' #直接定义在类里面的变量,没有赋值给实例对象的就是类属性。
def __init__(self, name,age,sex):
self.name = name
self.age = age
self.sex = sex
def hobby(self):
print('所有人都有爱好')
class boy(Person):
a = '男生'
def hobby(self): #重写 子类重写父类的方法
super().hobby() #重写父类方法后还想要使用父类方法的功能
print(f'{self.name}是男生,喜欢rap,篮球')
class girl(Person):
a = '女生'
def hobby(self):
print(f'{self.name}是女生,喜欢唱跳')
class Son(boy,girl): #多继承要注意继承顺序
pass
xm = Son('小明',5,'女')
如果不加super语句,继承会按照就近原则,即继承boy类。
如果把supper语句放到girl类,则依然是继承boy类,因为只需要执行hobby。