目录
嵌套(内部)函数
nonlocal关键字
LEGB规则
面向对象编程(object oriented)
面向过程思维(procedure oriented)
类的定义
构造函数__init__()
实例属性
实例方法
dir(s1) 可以获得所有属性、方法
print(s2.__dict__) 获得我们定义的属性
print(isinstance(s1,Student)) 判断是不是这个类的对象
类属性
类方法
静态方法
__del__方法(析构函数)和垃圾回收机制
__call__方法和可调用对象
嵌套(内部)函数
在函数内部定义的函数,只服务于这个函数
1.用于封装隐藏
2.降低重复代码
3.闭包
nonlocal关键字
用来声明外层的局部变量
def outer():
b=10
def inner():
nonlocal b
print("inner",b)
b=20
inner()
print("outerb",b)
outer()
LEGB规则
local 方法内部
Enclosed 嵌套函数
Global 全局变量
Built in 指Python为自己保留的特殊名称
str="global str"
def outer():
str="outer"
def inner():
str="inner"
print(str)
inner()
outer()
面向对象编程(object oriented)
适合大规模程序,设计者思维,例如造车
支持基本功能,继承,多态,封装
面向过程思维(procedure oriented)
按步骤,适合不复杂的问题,例如开车
类的定义
对象比作饼干 类就是“模具”,类把方法和属性整合到一起
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))
s1=Student("gg",18)
s1.say_score()
构造函数__init__()
1.名字固定,第一个参数固定是 self(可以改成s但没必要)
通过类名调用构造器,见上一个例子
实例属性
self.实例属性名=初始值
外部访问 s1.age=32 内存会把这一条加上,如果再创建一个s2 是没有age这一条属性的
实例方法
从属于实例对象的方法
用来操作实例属性的
dir(s1) 可以获得所有属性、方法
print(s2.__dict__) 获得我们定义的属性
print(isinstance(s1,Student)) 判断是不是这个类的对象
类属性
print(isinstance(s1,Student)) 判断是不是这个类的对象
类属性
注意 类属性 实例属性 实例方法 的内涵
方法和类属性都加载到类 一堆
实例属性加载到类对象里
类方法
从属于类对象的方法,用来操作类属性的
@classmethod
def 类方法名(cls,)
class Student:
company="sss"
@classmethod
def printCompany(cls):
print(cls.company)
Student.printCompany()
静态方法
定义与“类”对象无关的方法,与在模块中定义普通函数没有区别,静态方法放在了类的名字空间里,需要通过类来调用
@staticmethod
静态方法访问实例属性和实例方法会导致错误
class Student:
company="sss"
@staticmethod
def add(a,b):
print("{0}+{1}={2}".format(a,b,a+b))
Student.add(20,30)
__del__方法(析构函数)和垃圾回收机制
用于实现对象被销毁时所需的操作
当对象没有被引用(引用计数=0),垃圾回收器调用__del__()方法
class Person:
def __del__(self):
print("销毁对象{0}".format(self))
p1=Person()
p2=Person()
del p2
del p1
print("over")
__call__方法和可调用对象
函数调用本质用的是call方法



