类与对象(第三天)

一、类的定义

1、常规的写法:

class Axx(基函数/父类/多父类):

        a = xxx   # 类变量//全局变量 == 类中的所有人均可以调用

        b =xxx

        def __init__(self,xx):     # 实例化属性  # 初始化方法

                self.xx=xx      # 初始化参数

        def xxx(self,xxx):   # 实例化方法==函数

                AXX.a    # 调用类变量

                print()

       @classmenthod  # 类方法装饰器

        def sss(cls,xxx):    # 类方法

                cls.a   # 调用全局变量

        @stasticmenthod # 静态方法

        def (cls,xxx,xxx):  # 静态方法不能调取实例化属性

                Axx.a   # 强制调用实例化属性

                cls.a  # 调用全局变量

二、派生与继承(super函数//多态)

        1、class 类名(基类名/父类名):

                代码块

        2、注:子类函数可以对父类进行继承、修改、覆盖、多态等操作。

        3、函数的封装

                目的:隐藏函数中某些实现细节,同时避免使用者调用的参数

                class A :

                        def __init__(self,xxx):

                                self.xxx =xxx  #实例化属性 可以进行调用

                                self.__a =a   # 私有属性,不可以进行调用

                        def __x(self):    # 私有方法,不可以进行调用

        4、方法重写

                注:可以对父类函数的重写//可以对python默认函数进行重写(魔术方法)//

# class Myclass:
#     def __init__(self,x,y,item):
#         self.x = x
#         self.y = y
#         self.item = item
#     # 定义相加的魔法方法
#     def __add__(self, other):
#         return self.x + other.x , self.y + other.y   # 可以自定义加法的魔法方法
#
#     # 定义str 直接返回数值
#     def __str__(self):
#         # return "x = %d , y = %d" % (self.x,self.y)    # 返回 x = 10 , y = 20
#         return "sdadf"   # 返回 sdadf
#     # 自定义len
#     def __len__(self):
#         return len(self.item)   # 修改属性,只对myclass中item进行len计算,其他变量不计算字符

         5、super函数

                注:super函数可以调用父类中函数的用法,同时可以解决重复调用、钻石继承等问题。

                常用的调用方式:

class Parent:
    def __init__(self,name):
        self.name = name
    def add_(self,munn):
        print(f"年龄增加了{munn}岁")

class Child(Parent):
    def __init__(self,name,age):
        super().__init__(name)   # suoer 函数对父类的继承 == 对父类初始化参数的继承
        self.age = age
    def add_(self,munn):
        print("sss")
        super().add_(munn)  # 对父类方法的调用  // 若没有次行函数则为对父类方法的覆盖

    def print_info(self):
        print(self.name,self.age)

c = Child("sadfsa",151)
c.print_info()
c.add_(3  # sss   #年龄增加了3岁

        为什么使用 super().__init__()

  • 代码重用:避免在子类中重复父类的初始化代码。

  • 正确初始化:确保父类的初始化逻辑(如设置属性、分配资源等)被执行。

  • 支持多重继承:在多重继承情况下,super() 可以确保所有基类的构造函数都被正确调用方法

三、迭代器与生成器

注:生成迭代器(iter(range(10)))

        读取迭代器中的内容(next(iter))== 每次读取一个数值 == 超出索引时会报错

                try:  except :else: finally:  ==去解决报错问题

        生成器:yield 表达式:

                yield 与 return 的区别:

                        yield :在循环中可以依次输出循环列表中的内容,当输出后,循环暂停,当值使用后循环继续。

                        return:在循环中return 后面的代码不执行。循环截至。

四、函数式编程

        1、内置高阶函数

                

        2、lambda 表达式  == 可以嵌套在高阶函数中进行组合使用

        

# # 获取年龄最大的人
# # 高阶函数写法
# print(max(Gril.list_gril,key = lambda item:item.age))  # key == 为判断的关键字  == 返回的结果最大值对象

"""
# 常规写法
maxx = Gril.list_gril[0].age
for item in Gril.list_gril:
    if maxx < item.age:
        maxx = item.age
print([[item.name,item.age] for item in Gril.list_gril if item.age == maxx])
"""

五、函数闭包

        1、将函数作为返回值进行调用

        2、函数闭包的特点:

                嵌套函数 + 内部函数访问外部函数的变量 + 外部函数返回内部函数

# def give(money):
#     print(f"当前得到了{money}元")
#
#     def child_buy(price):
#         nonlocal money
#         money -= price
#         print(f"孩子花{price}元,剩余{money}")
#
#     return child_buy  # 返回未执行函数
#
# action = give(100)  # 调用主函数  == 执行
# action(80)  # 调用函数内的封装函数
# action(30)  # 调用函数内的封装函数

        3、函数闭包的特点 == 主函数生成后 函数栈帧不会立即释放,等待内部函数进行执行

                                ==        内存消耗过大

六、装饰器

        注:装饰器执行先后顺序

@A  # 新功能
@B  # 新功能
class C  # 旧功能
执行顺序::B A C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值