Если цель состоит в том, чтобы вызвать функцию some_func
с классом в качестве аргумента, один из ответов - объявить some_func
в качестве декоратора класса.Обратите внимание, что декоратор класса вызывается после инициализации класса.Классу, который оформляется как аргумент, будет передан класс.
def some_func(cls):
# Do something
print(f"The answer is {cls.x}")
return cls # Don't forget to return the class
@some_func
class A:
x = 1
Если вы хотите передать дополнительные аргументы some_func
, вы должны вернуть функцию из декоратора:
def some_other_func(prefix, suffix):
def inner(cls):
print(f"{prefix} {cls.__name__} {suffix}")
return cls
return inner
@some_other_func("Hello", " and goodbye!")
class B:
x = 2
Можно создавать декораторы классов, в результате чего они вызываются в обратном порядке, в котором они объявлены:
@some_func
@some_other_func("Hello", "and goodbye!")
class C:
x = 42
Результат которого:
# Hello C and goodbye!
# The answer is 42