第八讲
面向对象基础
一类人或一类车等的定义方法用列表太过复杂,所以抽象出类这一概念
面向过程编程(把大象放进冰箱需要几步)
- 把冰箱门打开
- 把大象装进去
- 把冰箱门关上
面向对象编程(大象,冰箱的种类,具象化目标具象化实现)
类的定义
# class 类名:
# 属性
# 方法
要求
-
类的首字母必须大写
-
类名后面必须有冒号
-
类体有缩进
class Phone:
pass
# 在python中 pass是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用于占位有语句,支撑结构
class Phone:
brand = '华为'
color = '黑色'
type = 'Mate30 pro'
price = 9999
# 定义行为和函数相似,只是必须带上一个参数self
def call(self):
print('打电话')
def send_message(self):
print('可以发信息')
class Saiya:
name = '悟空'
hair = '固定'
has_tail = True
appetite = '大'
def fight(self):
print('我们赛亚人就是喜欢战争')
类的使用
类的定义主要用途是把一个类的所有特征抽象出来,而用到具体对象时则需要讲抽象的特征一一赋值一一对应
# 对象名 = 类名(参数),其中参数是可选参数,可有可无
phone1 = Phone()
phone2 = Phone()
phone3 = Phone()
print(phone1)
print(phone2)
print(phone3)
# 访问方式 对象名.属性名 or 对象名.方法名
print(phone1.price)
属性添加的方式
- 通过外层的对象动态添加
- 使用构造函数添加
# 通过外层的对象动态添加
phone1.price = 10000
print(phone1.price)
# __init__魔术构造方法也就是构造函数,会在开始时自动调用
class Person:
country = '中国'
def __init__(self,name):
# self表示对象本身,self.name = name表示在当前对象中增加一个属性并且赋值(在这里也就是Person)
print('我是一个__init__方法')
self.name =name
def eat(self):
print('我是一个吃货')
p1 = Person(name = '龟龟')
p2 = Person(name = '兔兔')
print(p1)
print(p2)
类的方法的定义与调用
class Person:
name = '悟空'
def __init__(self,name):
self.name =name
def eat(self):
print('我是一个吃货')
def sprot(self, time):
if time < 6:
print(self.name + '你怎么这么勤快,这么早就起床了')
else:
print(self.name + '怎么这么爱睡懒觉!')
self.eat()
p1 = Person(name = '龟龟')
p2 = Person(name = '兔兔')
p1.sprot(time=3)
p2.sprot(time=7)
类的继承
class Saiya:
def __init__(self,name):
self.name = name
def eat(self):
print(self.name + '我是一个吃货')
def sprot(self, time):
if time < 6:
print(self.name + '你怎么这么勤快,这么早就起床了')
else:
print(self.name + '怎么这么爱睡懒觉!')
self.eat()
# 假设有另外一类人的定义,和上面Person几乎一样,为了减少代码重复,引入继承
class Saiya(Person):
#这样就可以表示Saiya类继承了所有Person属性和行为(可以任意调用Python),这样我们就有更多的代码空间进行Saiya不同于Person的特性,大大简化了代码