递归 —— 绘制分形几何
外部无法调用内部(隐藏)函数
def outer():
print("outer")
def inner():
print("inner")
inner()
outer()
# 写法1
def Chinese(name, family_name):
print({0}{1}.format(family_name,name))
def English(name, family_name):
print({0}{1}.format(name,family_name))
# 写法2
def Printname(isChinese, name, family_name):
def inner(name, family_name):
print({0}{1}.format(name,family_name))
if isChinese:
inner(family_name, name)
else:
inner(name, family_name)
nonlocal 关键字
a = 100
def outer():
b = 10
def inner():
nonlocal b # 声明外部函数的局部变量,这样改b不会报错
print('inner b:', b)
b = 20
global a # 声明全局变量
a = 1000
inner()
print('outer b:', b)
print('a:', a)
outer()
>>> inner b: 10
>>> outer b: 20
>>> a: 1000
面向对象编程
面向过程:按计划完成,找动词
面向对象:造车,找名词
简单数字 → 数组 → 结构体 → 对象
__new__ 创造对象
__init__ 初始化对象,第一个参数固定,也就是给创造的对象赋值
函数 第一个参数固定
__del__ 析构方法,垃圾回收机制
__call__ 可调用对象,__call__()
的作用是使实例能够像函数一样被调用,假设x是X类的一个实例。那么调用x.__call__(1,2)
等同于调用x(1,2)
,这个实例本身在这里相当于一个函数 ;
Student(类)是一个模具,定义了一个类将地址(图中为123)赋给了a,直接调用的是模具中的函数(say_score),处理的对象是地址引用的对象
print(dir(a)) # 对象的属性、方法
print(a.__dict__) # 对象的属性字典
class Man:
pass # 没想好定义什么类
print(isinstance(a, Man)) # 是否对象是否是该类型的实例对象
如果有s1,s2,s3,则会创建3个Student对象
类属性需要用对象调用,实例对象存储的是实例属性,调用的say_score函数位于类型对象里(模具),存储了类属性和代码信息,好处是当创造了100个对象,可以不用创建100个方法,say_score指向了新对象,此处未展开
类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象
创建类方法
类方法是从属于“类对象”的方法,通过装饰器@classmethod来定义
class Student:
company = 'SXT'
@classmethod
def printcompany(cls):
print(cls.company)
Student.printcompany()
创建新对象不能引用printcompy()函数,没有代码信息
调用类方法或静态方法时不能调用实例对象和实例方法,不能调用self(也就是第4点)
创建静态方法
Python中允许定义与“对象”关的方法,称为“静态方法”
“静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了"类的名字空间里面“ ,需要通过”类调用"
class Student:
company = 'SXT'
@staticmethod
def add(a,b):
print(a+b)
Student.add(20,30)
__del__机制
class Person:
def __del__(self):
print('销毁对象{0}'.format(self))
p1 = Person()
p2 = Person()
del p2
__call__机制
class salaryacc():
def __call__(self, salary):
return dict(monthSalary = salary)
s = salaryacc()
print(s(3000))
# 相当于 salaryacc()(3000)
people = People("nlj", 28) # init
people("xxxx", 30) # call