Изучение анонимных классов и объектов в Python
Встроенная функция Python type() возвращает класс, которому принадлежит объект. В 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)
Используя приведенный выше синтаксис, класс можно создать динамически. Три аргумента функции типа:—
- <ли>
name — имя класса, которое становится атрибутом __name__ нового класса
<ли>базы — кортеж, состоящий из родительских классов. Может быть пустым, если это не производный класс
<ли>dict — словарь, формирующий пространство имен нового класса, содержащее атрибуты, методы и их значения.
Создать анонимный класс
Мы можем создать анонимный класс с помощью приведенной выше версии функции type(). Аргумент name представляет собой нулевую строку, второй аргумент представляет собой кортеж одного класса — класса объекта (обратите внимание, что каждый класс в Python наследуется от класса объекта). Мы добавляем определенные переменные экземпляра в качестве словаря третьего аргумента. Мы пока оставляем его пустым.
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:создание, реверсирование, всплывающее окно с примерами массивов Python
- Функция Python map() с ПРИМЕРАМИ
- Питон — Словарь
- Наборы Python
- Использование IPython
- Количество строк Python() с ПРИМЕРАМИ
- Реальные часы работы на Python:живые сеансы вопросов и ответов для изучающих Python
- Комплексные пути и ресурсы обучения Python
- Python — многопоточное программирование