Python学习第七节

本文详细介绍了Python编程中的嵌套函数、nonlocal关键字以及LEGB规则,探讨了面向对象编程的区别、类的定义,包括构造函数、实例属性和方法。此外,还讲解了类对象的特性,如类属性、类方法和静态方法,并提到了析构函数和__call__方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、嵌套函数

在这里插入图片描述

def AA():
    print("AA")
    def aa(): #嵌套函数
        print("aa")
    aa()

AA()

在这里插入图片描述
在这里插入图片描述
避免重复代码:

1、未使用嵌套:

def AA(a,b):
    print(a,b)

def BB(a,b):
    print(b,a)

AA(1,2) # 调用AA()
BB(1,2) # 调用BB()

输出结果:
在这里插入图片描述

2、使用嵌套:

def CC(a,b,isAA):
    def Cc(a,b):
        print(a,b)
    if isAA:
        Cc(a,b)
    else:
        Cc(b,a)

CC(1,2,True) # 调用AA()
CC(1,2,False) # 调用BB()

在这里插入图片描述

二、nonlocal关键字

在这里插入图片描述

def AA():
    b = list(range(6)) #可变对象列表
    bb = {"name":"AA","age":16} #可变对象字典
    c = 20 #不可变对象int
    def BB():
        b.append("AA") #对可变对象(列表)进行修改
        print(b)
        bb["sex"] = "boy" #对可变对象(字典)进行修改
        print(bb)
        nonlocal c #对不可变对象(int)进行修改时必须使用 nonlocal 关键字声明后才能修改
        c = 21
        print(c)
    BB()

AA()

在这里插入图片描述

三、LEGB规则

在这里插入图片描述

a = "abc"
def AA():
    a = "ABC"
    def Aa():
        a = "abcd"
        print(a)
    Aa()

AA()

在这里插入图片描述
(1)将嵌套函数的变量赋值给注释掉后:

a = "abc"
def AA():
    a = "ABC"
    def Aa():
        # a = "abcd"
        print(a)
    Aa()

AA()

在这里插入图片描述
(2)将最外层函数的变量赋值语句给注释掉后:

a = "abc"
def AA():
    # a = "ABC"
    def Aa():
        # a = "abcd"
        print(a)
    Aa()

AA()

在这里插入图片描述

四、面向对象编程

在这里插入图片描述

1、面向对象和面向过程的区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、对象的进化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、类的定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Aa:
    a = 100
    def __init__(self, name, age): #构造函数,函数名为固定的: __init__()
        self.A = name              #属性
        self.B = age

    def BB(self):
        print(self.A, self.B)

C = Aa("小明",16)                  # 类名(元素1, 元素2.....) 此为调用构造方法,将"小明"带入"name" , 16带入"age",传入属性A和B
C.BB()                            # 调用方法BB()输出属性A和B的值
Aa("小明",16).BB()                # 等同于上面

在这里插入图片描述

2、构造函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、实例属性

在这里插入图片描述

4、实例方法

在这里插入图片描述

class Aa:
    a = 100
    def __init__(self, name, age): #构造函数,函数名为固定的: __init__()
        self.A = name              #属性
        self.B = age

    def BB(self):
        print(self.A, self.B)

C = Aa("小明",16)                  # 类名(元素1, 元素2.....) 此为调用构造方法,将"小明"带入"name" , 16带入"age",传入属性A和B
C.BB()                            # 调用方法BB()输出属性A和B的值
Aa("小明",16).BB()                # 等同于上面
C.sex = "boy"                     # 往类里添加属性 sex 值为:"boy"
print(C.A , C.B , C.sex)          # 输出所有属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Aa:
    ea = 100
    def __init__(self, name, age): #构造函数,函数名为固定的: __init__()
        self.A = name              #属性
        self.B = age

    def BB(self):
        print(self.A, self.B)

C = Aa("小明",16)                  # 类名(元素1, 元素2.....) 此为调用构造方法,将"小明"带入"name" , 16带入"age",传入属性A和B
C.BB()                            # 调用方法BB()输出属性A和B的值
Aa("小明",16).BB()                # 等同于上面
C.sex = "boy"                     # 往类里添加属性 sex 值为:"boy"
print(C.A , C.B , C.sex)
print(dir(C))                     # 输出该类下对象的所有属性和方法
print(C.__dict__)                 # 输出该类下对象的所有的属性字典
pass                              # 空语句
print(isinstance(C,Aa))           # 判断对象是否属于那个类型

输出结果:

小明 16
小明 16
小明 16 boy
['A', 'B', 'BB', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'ea', 'sex']
{'A': '小明', 'B': 16, 'sex': 'boy'}
True

Process finished with exit code 0

六、类对象

在这里插入图片描述

class Aa:
    ea = 100
    def __init__(self, name, age): #构造函数,函数名为固定的: __init__()
        self.A = name              #属性
        self.B = age

    def BB(self,a,b):
        print(self.A, self.B)
        print(a,b)



X = Aa                              # 将类对象给到X
Xb = X("小红",18)                   #  将该类的构造函数给到Xb
Xb.BB(1,2)                          # 执行BB()方法

在这里插入图片描述

1、类属性和类方法

(1)、类属性
在这里插入图片描述
在这里插入图片描述

class AA:

    A = "大" #类属性
    B = "小" #类属性

    def __init__(self): #构造方法
        self.a = "多" #实例属性
        self.b = "少" #实例属性

    def Aa(self): #实例方法
        print("实例属性a:{0}, 实例属性b:{1}, 类属性A:{2}, 类属性B:{3}".format(self.a, self.b, AA.A, AA.B)) #类属性调用方式为:类名.属性名


aA = AA()
aA.Aa()

在这里插入图片描述
(2)、类方法
在这里插入图片描述

class AA:

    cc = "Hellow Python" # 类属性

    @classmethod # 类方法开头声明
    def Aa(cls): # 类方法
        print(AA.cc)

AA.Aa() # 调用类方法

在这里插入图片描述

2、静态方法

在这里插入图片描述

class AA:

    @staticmethod # 静态方法声明
    def Aa(a): # 静态方法
        print(a)

AA.Aa("你好") # 静态方法调用

在这里插入图片描述

class AA:
    def __init__(self,a,b):
        self.aa = a
        self.bb = b

    @staticmethod # 静态方法声明
    def Aa(a): # 静态方法
        print(a)
        
        print(self.aa) # 静态方法中无法调用实例属性和方法,都则会报错

AA.Aa("你好") # 静态方法调用

在这里插入图片描述

七、析构函数

在这里插入图片描述

class AA:
    def __init__(self ,a ,b):
        self.A = a
        self.B = b
    def __del__(self): # 重写析构函数
        print("对象{0}已销毁".format(self))

Aa = AA(1,2) # 实例化对象Aa
Ab = AA(1,2) # 实例化对象Ab
del(Aa) # 销毁对象Aa
print(Ab) # 输出Ab
print(Aa) # 输出Aa

在这里插入图片描述
注:对象已被销毁后再次使用时会报错

八、__call__方法

在这里插入图片描述

class AA:

    def __call__(self, a): # 调用对象时默认执行的方法
        A1 = a * 2
        A2 = a / 2
        A3 = a + 2
        A4 = a - 2
        return dict(A1 = A1, A2 = A2, A3 = A3, A4 = A4) # 返回字典

Aa = AA() # 实例化对象给Aa
print(Aa(1000)) # 输出返回值

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值