元编程,Meta Programming,编写可以操作代码的代码,利用A语言编写可以操作B语言程序的程序,A、B为任意语言,A语言称之为元语言,B语言称之为目标语言。
- 反射和内省是一门元语言以本身为目标语言的体现。
- 编译器是高级语言操作汇编语言或机器语言的体现。
sys.modules
import sys
g = 9.8
print(sys.modules)
print(sys.modules['__main__'])
print(sys.modules['__main__'].g)
print(getattr(sys.modules['__main__'], 'g'))
print(getattr(sys.modules['sys'], 'getrefcount')(object))
hasattr、getattr、setter、delattr
class A:
a = 1
@classmethod
def func1(cls):
print(1)
@staticmethod
def func2(a):
print(a)
def func3(self):
print(3)
a = getattr(A, 'a')
print(a)
delattr(A, 'a')
print(hasattr(A, 'a'))
print(hasattr(A, 'func1'))
method = getattr(A, 'func1')
method() # 省略cls
print(hasattr(A, 'func2'))
method = getattr(A, 'func2')
method(2)
a = A()
print(hasattr(a, 'func3'))
method = getattr(a, 'func3')
method() # 省略self