2020-9-28 Day_7
1. 嵌套函数(内部函数)
函数里面套函数,内部函数只能在函数内访问。
一般在什么情况下使用嵌套函数?
- 1.封装,隐藏数据
- 2.避免函数内部重复代码。
- 3.闭包
nonlocal关键字
如果内部函数需要’’修改’’外部函数变量的值,需要在内部函数对变量声明nonlocal.
变量查找顺序:内部函数,外部函数,全局变量,内置函数
一、面向对象编程
Python完全采用了面向对象的思想,将数据和操作数据相关的方法封装到对象中,例如:继承、多态、封装等。
1.类
类名首字母大写,多使用“驼峰原则”, 类体中我们可以定义属性和方法,属性用来描述数据,方法(即函数)用来描述数据相关的操作。
2.__init__构造方法
构造方法用于执行“实例对象的初始化工 作”,即对象创建后,初始化当前对象的相关属性,无返回值。
3.实例属性
class Student:
def __init__(self,name,score):
self.name = name
self.score = score
def say_score(self):
print("{0}的成绩是:{1}".format(self.name,self.score))
s = Student("曹轶然",90)
s.say_score()
- 实例属性一般在__init__()方法中通过如下代码定义: self.实例属性名 = 初始值
- 在本类的其他实例方法中say_score,也是通过self 进行访问: self.实例属性名
- 创建实例对象后,通过实例对象访问:
obj01 = 类名() #创建对象,调用__init__()初始化属性
obj01.实例属性名 = 值 #可以给已有属性赋值,也可以新加属性
内存中访问过程如下图,a在栈中,其余在堆中。
Student类型obj(模具)
a
地址:XXX
4.其他
- dir(obj)可以获得对象的所有属性、方法
- obj.dict 查询对象的属性字典
- pass 空语句
- isinstance(对象,类型) 判断“对象”是不是“指定类型
5.类的相关概念
1.类对象
:’’class 类名:’’当解释器执行class 语句时, 就会创建一个类对象。
2.类属性
:从属于“类对象”的属性,也称为“类变量”。由于,类属性从属于类对象,可以被所有实例对象共享。例如:’’class 类名: 类变量名= 初始值’’ 在类中或者类的外面,我们可以通过:“类名.类变量名”来读写。
3.类方法
:是从属于“类对象”的方法。类方法中访问实例属性和实例方法会导致错误,子类继承父类方法时,传入cls 是子类对象,而非父类对象。类方法通过装饰器@classmethod来定义,格式如下:
@classmethod
def 类方法名(cls [,形参列表]) :
函数体
4.静态方法:Python中允许定义与“类对象”无关的方法,,需要通过“类调用”。静态方法中访问实例属性和实例方法会导致错误。静态方法通过装饰器@staticmethod来定义,格式如下:
@staticmethod
def 静态方法名([形参列表]) :
函数体
5.__del__方法(析构函数)和垃圾回收机制
Python实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器调用__del__方法。
6. __call__方法和可调用对象
class SalaryAccount:
def __call__(self, salary):
yearSalary = salary * 12
monthSalary = salary
daySalary = salary//22.5
hourSalary = daySalary//8
return dict(yearSalary=yearSalary,monthSalary = salary,daySalary = daySalary,hourSalary = hourSalary)
s = SalaryAccount()
print(s(30000))