经常在项目中看到这方面的代码,一开始很疑惑,所以,在这里进行总结。
参考资料
内部方法
1 2 3 4 5 6 7 8
| def test(*args): def add(*args): return args return add(*args) 运行结果如下: test(1,2,3) (1,2,3)
|
内部函数直接引用外部函数参数,外部函数test显示的返回内部函数add的调用。
当需要在函数内部多次执行复杂任务时,内部函数非常有用,从而避免了循环和代码的堆叠重复。
内部类
Python中内部类
1 2 3 4 5 6 7 8 9 10 11 12
| class MyOuter: age=18 def __init__(self,name): self.name=name
class MyInner: def __init__(self,inner_name): self.inner_name=inner_name
out=MyOuter('lqz') inner=out.MyInner('lqz_inner') print(inner.inner_name)
|
内部类调用外部类的类属性和类方法
注意是类属性和类方法,不是对象属性和对象的绑定方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class MyOuter: age=18 def __init__(self,name): self.name=name @classmethod def outer_class_method(cls): print('我是外部类的类方法')
class MyInner: def __init__(self,inner_name): self.inner_name=inner_name def inner_method(self): print('我是内部类的对象方法') MyOuter.outer_class_method()
out=MyOuter('lqz') inner=out.MyInner('lqz_inner') inner.inner_method()
|
内部类调用外部对象的对象属性和方法
需要在内部类构造的时候,把对象传过来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class MyOuter: age=18 def __init__(self,name): self.name=name @classmethod def outer_class_method(cls): print('我是外部类的类方法') def outer_obj_method(self): print('我是外部类对象的绑定方法')
class MyInner: def __init__(self,inner_name,obj): self.inner_name=inner_name self.obj=obj def inner_method(self): print('我是内部类的对象方法') MyOuter.outer_class_method() self.obj.outer_obj_method()
out=MyOuter('lqz') inner=out.MyInner('lqz_inner',out) inner.inner_method()
|