【Python】Python学习笔记12

代码笔记:

'''
面向过程和面向对象的区别:
    (1)面向过程:当需要实现某一功能时,注重实现的过程,分析出每一个步骤如何去实现并定义相应的函数,然后调用函数。
    (2)面向对象:当需要实现某一功能时,注重的是找某个对象去实现。
类(class):是对一系列具有相同属性和行为事物的统称。是一个抽象的概念,是不真是存在的事物。
    注意:类命名时遵循大驼峰命名法,见名知意。
    基本格式:
        class 类名:
        代码块
对象(object):是类的具体表现。
    实例化(创建)对象的格式:
        对象名 = 类名()
类的三要素:
    1.类名
    2.属性:对象的特征描述
    3.方法:对象具有的功能(行为),用来说明能够做什么。
'''
class Fish:             # 创建Fish类,声明height属性
    height = 30
print(Fish.height)      # 查看类属性格式:类名.属性名
Fish.weight = 40        # 新增类属性:类名.属性名 = 值
print(Fish.weight)
fs = Fish()             # 实例化一个对象
print(fs)
'''
实例方法:由对象调用,至少有一个self参数;执行实例方法的时候,自动将调用该方法的对象赋值给self。
'''
class Person:
    height = 170        # 类属性height
    weight = 60         # 类属性weight
    def run(self):      # self参数是类中实例方法必须具备的
        print('人类会跑步')
        print(f'方法中的self:{self}')   # self参数代表调用该方法的实例对象
man = Person()
man.run()
'''
实例属性基本格式:self.属性名
类属性与实例属性的区别:
    类属性:是属于类的属性,是公共的,所有实例对象都可以访问。
    实例属性:是属于实例对象的,是私有的,只能由对象名访问,不能由类名访问。
'''
class Vehicle:
    speed = 90
    def speed_up(self):
        print('汽车当前速度为:', self.speed, 'km/h')       # self.speed为类属性
        print('加速后的速度为:', self.current_speed, 'km/h')   # self.current_speed实例属性
        print('最后的速度为:',self.final_speed, 'km/h')
v1 = Vehicle()
v1.current_speed = 120  # 添加实例属性
v1.final_speed = 30     # 添加实例属性
print(v1.final_speed)   # 根据对象名访问实例属性
print(v1.speed)         # 根据对象名访问类属性
v1.speed_up()
'''
构造函数(方法):__init__()
    作用:通常用来做属性初始化或者赋值操作;
    注意:在类实例化对象的时候会被调用。
析构函数(方法):__del__()
    作用:用于对象的回收和销毁操作。
    注意:在删除对象的时候,解释器会默认调用__del__()方法。
'''
class Cup:
    def __init__(self, owner, use, price):      # 构造函数
        self.owner = owner          # 实例属性:杯子主人
        self.use = use              # 实例属性:杯子用途
        self.price = price          # 实例属性:杯子价格
    def display(self):
        print(f'这是{self.owner}的{self.use}杯,花费{self.price}元购买。')
cp = Cup('小明', '咖啡', 20)
cp.display()
cp1 = Cup('小华', '喝茶', 18)
cp1.display()
'''
面向对象的三大特性:封装、继承、多态。
封装:将复杂的信息、流程封装起来,让使用者只需要通过简单的步骤,就能实现某个功能。
    作用:隐藏对象中一些不希望被外部访问到的属性或方法。
私有属性:声明私有属性或方法;在类中定义后,外部实例对象可以访问,也可以被子类继承,但无法被其他.py文件导入。
    格式:在属性或者方法前加上1个下划线    _属性名(方法名)
    用途:为了避免与关键字命名冲突而采用的命名方式。
隐藏属性:只允许在类的内部使用,无法通过对象直接访问,只能间接访问;子类不会继承,也无法被其他.py文件导入。
    格式:在属性或者方法前加上2个下划线    __属性名(方法名)
    用途:一般用于Python的魔术方法或属性,都是有特色含义或功能的,不建议轻易使用。
'''
class Student:
    name = '张三'     # 普通属性
    __score = 88    # 隐藏属性
    _course = 'Python程序设计'  # 私有属性
    def display(self):
        print(f'{self.name}的{self._course}成绩是{self.__score}分。')
        self.__location()       # 间接访问隐藏方法
    def __location(self):       # 隐藏方法
        print('考试座位在1101教室的32号座位')
    def _behave(self):          # 私有方法
        print('考试行为正常')
s = Student()
print(s._course)
print(s.name)
# print(s._Student__score)    # 可以通过 “ _类名__属性名 ” 方式直接访问隐藏属性。
s.display()     # 在类的内部访问隐藏变量
s._behave()     # 访问私有方法
'''
面向对象的三大特性:封装、继承、多态。
继承:将类分为子类和父类,子类默认继承父类的属性和方法。
    格式:class 子类名(父类名):
    分类:单继承和多继承
'''
# 单继承
class HumanBeing:   # 父类
    def walk(self):
        print('我会走路')
    def run(self):
        print('我会跑')
class Man(HumanBeing):  # 子类1
    pass        # 占位符,当一个类不写任何代码时,通过保持缩进来保证程序正常执行。
class Woman(HumanBeing):    # 子类2
    pass
man = Man()
man.walk()
man.run()
woman = Woman()
woman.walk()
woman.run()
'''
继承的传递(多重继承):A类(子类1)继承B类(父类1),B类(父类1)继承C类(父类2)。A同时具有B类和C类的属性和方法。
'''
class Teacher:      # 父类2
    def teach(self):
        print('上课')
class Lecturer(Teacher):        # 父类1
    def check(self):
        print('批改试卷')
class Professor(Lecturer):  # 子类
    def survey(self):
        print('做研究')
professor = Professor()
professor.check()
professor.teach()
professor.survey()
'''
方法重写:在子类中定义与父类相同名称的方法
    (1)覆盖父类的方法:在子类中重写一个与父类同名的方法,子类调用时优先调用重写后的方法。
    (2)对父类方法进行扩展:在子类方法中调用父类的方法。有两种形式:
        1.父类名.方法名(self)
        2.super().方法名()     【推荐使用】不需要参数
        3.super(子类名,self).方法名()
'''
class A:        # 父类
    def eat(self):
        print('吃米饭')
    def sleep(self):
        print('睡觉')
    def run(self):
        print('跑步')
class B(A):     # 子类
    def eat(self):              # 重写方法eat
        A.eat(self)             # 通过【父类名.方法名(self)】的方式对方法进行扩展
        super().sleep()         # 通过【super().方法名()】的方式对方法进行扩展
        super(B, self).run()    # 通过【super(子类名,self).方法名()】的方式对方法进行扩展
        print('吃面')
b = B()
b.eat()

运行结果:

30
40
<__main__.Fish object at 0x000001EBA546B100>
人类会跑步
方法中的self:<__main__.Person object at 0x000001EBA544F190>
30
90
汽车当前速度为: 90 km/h
加速后的速度为: 120 km/h
最后的速度为: 30 km/h
这是小明的咖啡杯,花费20元购买。
这是小华的喝茶杯,花费18元购买。
Python程序设计
张三
张三的Python程序设计成绩是88分。
考试座位在1101教室的32号座位
考试行为正常
我会走路
我会跑
我会走路
我会跑
批改试卷
上课
做研究
吃米饭
睡觉
跑步
吃面

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值