Python面向对象

面向过程和面向对象

**面向过程:就是注意完成这个任务的步骤
面向对象:是关注完成任务的对象,不关注对象如何实现
就拿洗衣服来说:
面向过程:
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;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值