第七章 python 学习笔记

嵌套函数(内部函数)
在函数中调用其内部方法
在哪里定义在哪里使用 外部无法调用
在哪里产生在哪里使用 (局部使用)
主要作用: 1 封装隐藏
2 降低重复代码
3 闭包(后期研究)
nonlocal
作用:被嵌套的内部函数要使用外部函数的变量
LEGB规则
python中查找名称时按照LEGB规则
Local 函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 模块中的全局变量
Build in 指的是python为自己保留的特殊名称(内置函数)
总结:内部优先 默认最后`

#str = "asdasd"# #G#
def outer():
    #str = "attyuar"# #E#
    def inner():
        #str = "ssuuaok" #L#
        print(str)
    inner()
    print(str)  #B#
outer()

python 面向对象编程
基本功能 继承 多态 封装
宏观 面向对象(设计者思维)
微观 面向过程 (执行者思维)
模块化思维 整体统合
面向复杂的过程 找动词
面向对象 找名词

对象的进化

结构体(数据的集合体)
对象(不光有数据 还有处理数据的方法 的综合结合体)
有处理方法的结构体 为 对象

类的定义
一般类名的第一个字母大写
构造方法"__" 双下划线

class Student:

    def __init__(self,name,score):
        self.name = name
        self.score = score
    def say(self):
        print("{0}的分数是{1}".format(self.name,self.score))

s1 = Student("周大福",99)
s1.say()

(所有的类之中的定义方法)所有的构造器 第一个参数一定要是"self"(也可以是其他但习惯统一使用self)
s1 = Student(“周大福”,99)
其实同时调用了两个方法
1 init() 初始化创建好的对象 初始化指的是:给实例属性赋值
2 new() 用于创建对象 但一般我们无需重新定义该方法(看不到)

实例
实例从属于对象 也叫实例变量
继承类的同时 可以有自己特点的独立个体
s1 具有name score两个属性
同时还可以增加属性
s1.age = 18
s1.salary = 20000
age 和 salary 会加入成为 s1这个实例新的属性
但只属于实例s1
如果过在创建 新的实例 s2 只具备类的两个属性 与 s1增加的两个属性 age 与 salary 和新的实例s2 不发生关联 也没有从属关系.

实例方法
定义实例方法
def 方法名 self 形参

两种写法:
s1 = Student()

s1.say() 解释器翻译 Student.say(s1)
两种写法都合理

print(dir(s1)) #获得对象所有属性和方法#
print(s1.__dict__) #获得所定义的属性#
print(isinstance(s1,Student)) #判断是否是该类的实例对象#
class stf:    # Pass占位之用 可用于类和方法#
    pass
def sef():
    pass

类对象

类属性

class Student:
    company = "SXT"#类属性#
    count = 0      #类属性#

    def __init__(self,name,score):
        self.name = name   #实例属性#
        self.score = score #实例属性#
        Student.count = Student.count+1
    def say(self):         #实例方法#
        print("我们公司:",Student.company)
        print(self.name,"的分数是:",self.score)
s1 = Student("小赵",75)
s1.say()
s2 = Student("小赵1",76)
s3 = Student("小赵2",77)
print("一共创建了{0}个Student对象".format(Student.count))

当创建一个class类之时 首先会去调用"模具" -----> type类
self.name = name #实例属性#
self.score = score #实例属性#
两个实例属性包含在 此时的Student类之中
另外用来处理实例的实例方法say() 也在Student类之中

而此时两个实例属性
self.name = name #实例属性#
self.score = score #实例属性#
不存在
只有在实例化出新的对象才会 获得实例属性(s1,s2,s3)
实例对象 再通过调用的方式 从Student类中获取 实例方法say()
示意图:
在这里插入图片描述
类方法/静态方法
类方法 是从属于类的方法
通过装饰器@classmethod来定义
格式如下:
@classmethod
def 类方法名 [cls,形参列表] (对应实例方法的"self"记忆)
函数体

代码示例

class Student:
    company = "SYD"
    @classmethod
    def gsname(cls):
        print(cls.company)
Student.gsname()

类函数与之前提到过的实例函数一样 存在于student类中
但在实例中却不存在,也不可调用类方法

静态方法
@staticmethod
def 静态方法名([形参列表]):
函数体

要点
1 @staticmethod必须位于方法的上面
2 类名.静态方法(参数列表)
3 静态方法中访问实例方法 和 实例属性 会导致错误

*类方法和静态方法不可以调用 实例变量 和 实例方法(类方法和静态方法发生在创建实例之前,实例不存在,实例变量和实例方法也就不存在,因此无法调用)
在这里插入图片描述

析构函数
del 用于对象销毁的工作
在这里插入图片描述

__call__方法和可调用对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值