# 定义有可选参数的元类
# 可选参数的元类
from utils import debug
class MyMeta(type):
# Optional
@classmethod
@debug
def __prepare__(cls, name, bases, *, debug=False, synchronize=False):
# Custom processing
pass
return super().__prepare__(name, bases)
# Required
@debug
def __new__(cls, name, bases, ns, *, debug=False, synchronize=False):
# Custom processing
pass
return super().__new__(cls, name, bases, ns)
# Required
@debug
def __init__(self, name, bases, ns, *, debug=False, synchronize=False):
# Custom processing
pass
super().__init__(name, bases, ns)
class Spam(metaclass=MyMeta, debug=True, synchronize=True):
pass
"""
Calling __prepare__ with
args: (<class '__main__.MyMeta'>, 'Spam', ())
kwargs: {'debug': True, 'synchronize': True}
local variables: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022763C5EB48>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'd:/Program/Workspace/CPythonTest/PyTests/metaclass_test.py', '__cached__': None, 'debug': <function debug at 0x0000022764138048>, 'MyMeta': <class '__main__.MyMeta'>}
result: {}
Calling __new__ with
args: (<class '__main__.MyMeta'>, 'Spam', (), {'__module__': '__main__', '__qualname__': 'Spam'})
kwargs: {'debug': True, 'synchronize': True}
local variables: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022763C5EB48>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'd:/Program/Workspace/CPythonTest/PyTests/metaclass_test.py', '__cached__': None, 'debug': <function debug at 0x0000022764138048>, 'MyMeta': <class '__main__.MyMeta'>}
result: <class '__main__.Spam'>
Calling __init__ with
args: (<class '__main__.Spam'>, 'Spam', (), {'__module__': '__main__', '__qualname__': 'Spam'})
kwargs: {'debug': True, 'synchronize': True}
local variables: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022763C5EB48>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'd:/Program/Workspace/CPythonTest/PyTests/metaclass_test.py', '__cached__': None, 'debug': <function debug at 0x0000022764138048>, 'MyMeta': <class '__main__.MyMeta'>}
result: None
"""