一.Python中内部类
典型定义:
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)
二.内部类调用外部类的类属性和类方法
(注意是类属性和类方法,不是对象属性和对象的绑定方法)
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()
三.内部类调用外部对象的对象属性和方法
需要在内部类构造的时候,把对象传过来
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()
#更多Python视频、源码、资料加群711312441免费获取
out=MyOuter('lqz')
inner=out.MyInner('lqz_inner',out)
inner.inner_method()
from types import MethodType,FunctionType
def check(arg):
if isinstance(arg,MethodType):
return ('方法')
if isinstance(arg,FunctionType):
return ('函数')
if callable(arg):
return ('111')
class Foo(object):
def f1(self):
print('f1')
@classmethod
def f2(self):
print('f2')
@staticmethod
def f3():
print('f3')
list_display = [f1, f2, f3]
"""
<function Foo.f1 at 0x000000000268C040>
<classmethod object at 0x00000000025CEE50>
<staticmethod object at 0x00000000025CEFA0>
"""
obj = Foo()
Foo.list_display.append(obj.f1)
Foo.list_display.append(obj.f2)
Foo.list_display.append(obj.f3)
"""
<bound method Foo.f1 of <__main__.Foo object at 0x00000000025FD2E0>>
<bound method Foo.f2 of <class '__main__.Foo'>>
<function Foo.f3 at 0x000000000265B160>
"""
Foo.list_display.append(Foo.f1)
Foo.list_display.append(Foo.f2)
Foo.list_display.append(Foo.f3)
"""
<function Foo.f1 at 0x000000000265B040>
<bound method Foo.f2 of <class '__main__.Foo'>>
<function Foo.f3 at 0x000000000265B160>
"""
import traceback
for item in Foo.list_display:
print(item,check(item),type(item))
"""
函数 <class 'function'>
None <class 'classmethod'>
None <class 'staticmethod'>
方法 <class 'method'>
方法 <class 'method'>
函数 <class 'function'>
函数 <class 'function'>
方法 <class 'method'>
函数 <class 'function'>
## 方法和函数
对象.xxx xxx就是方法
类.xxx xxx就是函数
xxx xxx就是函数
"""
####
import traceback
def func():
try:
a += 1
except Exception as e:
# 获取当前错误的堆栈信息
msg = traceback.format_exc()
print(msg)
# logging.error(str(e))
# logging.error(str(msg))
func()