面向过程和面向对象
**面向过程:就是注意完成这个任务的步骤
面向对象:是关注完成任务的对象,不关注对象如何实现
就拿洗衣服来说:
面向过程:
1,先放水
2,放衣服
3,放洗衣液
4,开始洗
面向对象:
我们可以创建一个对象,让这个对象来完成洗衣服这个完整的动作,而不关注洗衣服的过程
**
类和对象
**类是一个群体的总称,对象是对类的具体化
比如:人是人类这个类,其中有一个小明这个对象
**
#语法格式
#class 类名:
# 类体
#注:类名的首字母一般要大写(你问为啥大写,这是甲鱼的臀部--规定)
class Men:#定义了一个类
name = "男人"#定义名称变量
def can(self): #定义了一个方法,
print("力气很大")
#创建类的对象
male1 = Men()#创建了一个对象male1
male1.can()
#总结:我们会发现在屌用can方法时我们并没有传参数,那self是哪来的了,
#self是标识对象的因为一个类可以创建多个对象,但多个对象都可以调用这个方法,所以需要标识是那个对象,
# self可理解为那个对象调用那么self就是那个对象的内存地址,这个传递是系统自动完成的
#注:类的所有方法都必须至少有一个名为self的参数,并且方法的第一个参数必须是self参数
#如果小伙伴接触过JAVA,这里的self和this差不多
构造方法
#构造方法的固定名称为__init__(注意这个init前后是两个下划线),当创建类的对象时,系统会自动调用构造方法
#构造方法的作用
# 1,为对象开辟内存空间
# 2,完成对象的赋值
class Are:
def __init__(self,wide,hight):
self.wides = wide#这里的self(表示当前调用构造函数对象的).wides表示当前对象的宽为wide
self.hights = hight
def ares(self):
print(f'面积:{self.wides} * {self.hights} = {self.wides * self.hights}')
zheng1 = Are(3,3)
zheng1.ares()
chang1 = Are(4,5)
chang1.ares()
类成员和实例成员
#作者:chen
#时间:2021/5/31 8:51
class Car:
brand = '大奔'#类变量
def __init__(self,color,price):
self.color = color#实例变量
self.price = price
def infors(self):
print(f'这个车辆的基本信息:品牌:{self.brand},颜色:{self.color},单价:{self.price}')
car1 = Car('白色',130000)
car2 = Car('红色',210000)
Car.brand = '雪铁龙'
car1.brand = '东风'
car1.infors()
car2.infors()
#每个对象都有自己独立的内存空间,保存各自不同的属性
#多个对象的方法在内存中只有一份,调用时将对象引用传到方法内部,通过对象引用,可以访问当前对象的属性和其他方法
面向对象的特征
封装
#第一层:在创建类和对象时就已经体现了封装,将属性和方法放在类中
#第二层:是将属性或方法定义为私用的,通过实例对象名无法调用
class People:
def __init__(self):
self.__name = "晨雾"
def __show(self):
print("我的密码是12121")
def print(self):
print(self.__name)#两个下划线
self.__show()
p1 = People()
# print(p1.__name)
# p1.__show()
p1.print()#这样可以,保护了私有方法
#无法调用,说明无法引用私有方法和私用变量
继承
继续描述的是事物之间的从属关系
单继承
在python中,当有一个子类只有一个父类时称为单继承
语法格式:class 子类名(父类名)
#作者:chen
#时间:2021/6/14 20:24
class Human:
base_name = '人'
def __init__(self,age,hight):
self.age = age
self.hight = hight
def show(self):
print(f'我是{self.base_name},年龄:{self.age},身高:{self.hight}')
class Student(Human):
def setName(self,newName):
self.base_name = newName
human_1 = Human(12,167)
student_1 = Student(12,167)#直接默认的继承过来了父类的构造方法
student_1.setName("学生")
student_1.show()#直接调用父类里的方法
#子类继承了父类的属性和方法
案例
植物大战僵尸
class MaxCorpse:
type = '僵尸'
def show(self):
print('我是一个僵尸')
class Corpse(MaxCorpse):
delete_blood = 20
def __init__(self,type,count_blood):
self.type = type
self.count_blood = count_blood
def attack(self,plant):
self.count_blood = self.count_blood - plant.delete_blood
def dis(self):
if self.count_blood > 0:
print(f'僵尸的血量{self.count_blood}')
class Plant:
delete_blood = 25
def __init__(self,type,count_blood):
self.type = type;
self.count_blood = count_blood
def attack(self,corpse):
self.count_blood = self.count_blood - corpse.delete_blood
def dis(self):
if self.count_blood > 0:
print(f'植物的血量{self.count_blood}')
corpse = Corpse('普通僵尸',500)
plant = Plant('豌豆射手',200)
print('-' * 10,end='')
print('开始战斗',end='')
print('-' * 10)
while True:
corpse.attack(plant)
plant.attack(corpse)
print('*' * 10)
corpse.dis()
plant.dis()
print('*' * 10)
if plant.count_blood <= 0:
print('僵尸胜利,僵尸吃了你的脑子')
break;
if corpse.count_blood <= 0:
print('植物胜利,保护了主人')
break;