TGViewer
Библиотека Python разработчика | Книги по питону Библиотека Python разработчика | Книги по питону @bookpython · 18.1K subscribers
Post #3828 2.44K
Вы можете передавать аргументы в пользовательский метакласс прямо из определения класса.
Синтаксис класса поддерживает именованные аргументы:


class Klass(Parent, arg='arg')


Ключевое слово metaclass зарезервировано для указания метакласса, но остальные аргументы можно использовать свободно.

Ниже приведён пример метакласса, который создаёт класс без одного из атрибутов.
Имя атрибута, который нужно удалить, передаётся через аргумент remove:


class FilterMeta(type):
def __new__(mcs, name, bases, namespace, remove=None, **kwargs):
if remove is not None and remove in namespace:
del namespace[remove]

return super().__new__(mcs, name, bases, namespace)


class A(metaclass=FilterMeta, remove='half'):
def half(x):
return x // 2

half_of_4 = half(4)
half_of_100 = half(100)


a = A()
print(a.half_of_4) # 2
print(a.half_of_100) # 50
a.half # AttributeError


В этом примере метод half удаляется из класса A во время его создания, поэтому попытка обратиться к a.half вызывает AttributeError.

👉@BookPython
  • 👍 1
More from @bookpython
  1. Sep 28, 2026Python поддерживает цепочные присваивания со следующим синтаксисом: a = b = c = 42 Выгляди…
  2. Sep 27, 2026Чтобы объект можно было использовать в качестве ключа словаря, он должен быть хешируемым.…
  3. Sep 25, 2026Как быстро очистить список в Python? Сегодня я покажу вам несколько способов очистки списк…
  4. Sep 24, 2026🚀 5 крутых Python-фишек, о которых знают не все Python — мощный и удобный язык, но даже о…
  5. Sep 23, 2026🔥 Как ускорить Python-код в 10 раз? Сегодня покажу вам мощный инструмент для оптимизации…
  6. Sep 21, 202610 полезных библиотек для Python-разработчика Сегодня я подготовил для вас подборку из 10…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →