Fun Python #3: stdClass like in PHP
Сегодня я узнал…
Сегодня я узнал…
Я тут недавно сделал пост, в котором показал как можно делать dotted dict
и подумал что это аналог stdClass в PHP.
Я был не совсем прав. Аналогом stdClass из PHP можно считать следующий вариант:
a = type("stdClass", (), {
"foo": 123,
"bar": lambda x: x + 1
})
print(a.bar(a.foo)) # 124
print(type(a)) # <class 'type'>
В Python-е все является объектом, и классы не исключение, а значит, эти классы кто-то создаёт. Собственно все классы создает type, который является базовым классом. У каждого класса есть type, а типом самого type является он сам. Это рекурсивное замыкание, которое реализовано внутри Python с помощью С:
type(type) # <class 'type'>
Кстати, второй аргумент в type — это кортеж, в котором перечисляют классы от которых нужно унаследоваться:
class B:
buz: "abc"
a = type("stdClass", (B,), {})
print(a.buz) # abc
Собственно вот что я сегодня узнал про классы в Python ?