类:
定义类:
class 类名():
代码
.....
创建对象
对象名 = 类名()
self
self指的是调⽤该函数的对象。
例:
class Washer():
def wash(self):
print('我会洗⾐服')
# <__main__.Washer object at 0x0000024BA2B34240>
print(self)
haier1 = Washer()
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier1对象调⽤实例⽅法
haier1.wash()
haier2 = Washer()
# <__main__.Washer object at 0x0000022005857EF0>
print(haier2)
添加和获取对象属性
利用self直接定义变量添加即可
例:
# 定义类
class Washer():
def print_info(self):
print(f'haier1洗⾐机的宽度是{self.width}')
print(f'haier1洗⾐机的⾼度是{self.height}')
# 创建对象
haier1 = Washer()
# 添加实例属性
haier1.width = 500
haier1.height = 800
haier1.print_info()
魔法方法:
__init__()
类似于构造函数,用于初始化对象
可以带参也不可以不带参,和c++一样不多说啦
__init__()
⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
__init__(self)
中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去
2.__str__()
:
当你想要输出这个类的对象时会自动输出这个函数的返回值
3. __del__()
:
删除一个类的对象时会自动调用这个函数
总结:如果要直自己实现一个功能,还需多练,这只是基础,准备学完python基础先搞个类似于管理系统的项目熟悉下python基础,要不这样学不了什么
继承:
单继承:
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 2. 徒弟类
class Prentice(Master):
pass
# 3. 创建对象daqiu
daqiu = Prentice()
# 4. 对象访问实例属性
print(daqiu.kongfu)
#5. 对象调⽤实例⽅法
daqiu.make_cake()
这个pass一开始没看懂,搜了一下才知道是占据位置,让代码整体完整的意思
多继承:
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 创建学校类
class School(object):
def __init__(self):
self.kongfu = '[⿊⻢煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
class Prentice(School, Master):
pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
注意:
1.当⼀个类有多个⽗类的时候,默认使⽤第⼀个⽗类的同名属性和⽅法。
2.子类可重写父类的函数,若调用该函数时,会调用子类的函数
3.利用super可以调用父类中与子类同名的函数
4.注意:使⽤super() 可以⾃动查找⽗类。调⽤顺序遵循 __mro__
类属性的顺序。⽐较适合单继承
使⽤
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
class School(object):
def __init__(self):
self.kongfu = '[⿊⻢煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 独创配⽅
class Prentice(School, Master):
def __init__(self):
self.kongfu = '[独创煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
print(Prentice.__mro__)
注意:
__mro__
方法:python 类有多继承特性,如果继承关系太复杂,很难看出会先调用那个属性或方法,利用这个方法获取该类的调用顺序
定义私有属性与方法
在属性名和⽅法名 前⾯ 加上两个下划线 __。即可
class Master(object):
def __init__(self):
self.kongfu = '[古法煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
class School(object):
def __init__(self):
self.kongfu = '[⿊⻢煎饼果⼦配⽅]'
def make_cake(self):
print(f'运⽤{self.kongfu}制作煎饼果⼦')
class Prentice(School, Master):
def __init__(self):
self.kongfu = '[独创煎饼果⼦配⽅]'
# 定义私有属性
self.__money = 2000000
# 定义私有⽅法
def __info_print(self):
print(self.kongfu)
print(self.__money)
def make_cake(self):
self.__init__()
print(f'运⽤{self.kongfu}制作煎饼果⼦')
def make_master_cake(self):
Master.__init__(self)
Master.make_cake(self)
def make_school_cake(self):
School.__init__(self)
School.make_cake(self)
# 徒孙类
class Tusun(Prentice):
pass
daqiu = Prentice()
# 对象不能访问私有属性和私有⽅法
# print(daqiu.__money)
# daqiu.__info_print()
xiaoqiu = Tusun()
# ⼦类⽆法继承⽗类的私有属性和私有⽅法
# print(xiaoqiu.__money) # ⽆法访问实例属性__money
# xiaoqiu.__info_print()
注意:私有属性和私有⽅法只能在类⾥⾯访问和修改。
获取和修改私有属性值
在Python中,⼀般定义函数名 get_xx ⽤来获取私有属性,定义 set_xx ⽤来修改私有属性值。