Исследование анонимных классов и объектов в Python
Встроенная функция type() в Python возвращает класс, которому принадлежит объект. В Python класс, будь то встроенный или пользовательский, являются объектами типа class.
Пример
class myclass:
def __init__(self):
self.myvar=10
return
obj = myclass()
print ('class of int', type(int))
print ('class of list', type(list))
print ('class of dict', type(dict))
print ('class of myclass', type(myclass))
print ('class of obj', type(obj))
Это произведет следующий вывод:
class of int <class 'type'> class of list <class 'type'> class of dict <class 'type'> class of myclass <class 'type'>
У type() есть версия с тремя аргументами следующим образом:
Синтаксис
newclass=type(name, bases, dict)
Используя вышеуказанный синтаксис, класс может быть создан динамически. Три аргумента функции type:
name — имя класса, которое становится атрибутом __name__ нового класса
bases — кортеж, состоящий из родительских классов. Может быть пустым, если не производный класс
dict — словарь, формирующий пространство имен нового класса, содержащий атрибуты и методы и их значения.
Создание анонимного класса
Мы можем создать анонимный класс с вышеуказанной версией функции type(). Аргумент name — пустая строка, второй аргумент — кортеж из одного класса object (обратите внимание, что каждый класс в Python наследуется от класса object). Мы добавляем определенные переменные экземпляра как третий аргумент-словарь. Пока оставим его пустым.
anon=type('', (object, ), {})
Создание анонимного объекта
Для создания объекта этого анонимного класса:
obj = anon()
print ("type of obj:", type(obj))
Результат показывает, что объект является анонимным классом
type of obj: <class '__main__.'>
Пример анонимного класса и объекта
Мы также можем динамически добавлять переменные экземпляра и методы экземпляра. Посмотрите на этот пример:
def getA(self):
return self.a
obj = type('',(object,),{'a':5,'b':6,'c':7,'getA':getA,'getB':lambda self : self.b})()
print (obj.getA(), obj.getB())
Это произведет следующий вывод:
5 6
Python
- Переменные, константы и литералы в Python — подробное руководство
- Проверьте версию Python в Linux, macOS и Windows: краткое руководство
- Мастерство работы со списками Python: append, sort, len и list comprehensions — практическое руководство
- Наследование в Python: концепции, синтаксис и практические примеры
- Освоение enumerate() в Python: циклы с индексами для списков, кортежей, строк и словарей
- Настройка среды разработки Python: Полное руководство по установке
- Flask против Django: ключевые отличия, особенности и выбор фреймворка
- Ускоренные пути обучения Python: от новичка к профи с Real Python
- Как удалить дубликаты из списка Python: 8 проверенных способов
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами