Как создать объект «Два»?Ни constr (), ни c () не работают;и кажется, что apply преобразует его в тип.
Приведенный выше комментарий был сделан в отношении этого кода:
>>> def digest(constr):
... c = apply(constr)
... print c.__class__.__name__
... print constr.__class__.__name__
apply
(устарело: см. ответ @ pyfunc) конечно не превращает класс Two
в тип: он уже один.
>>> class Two(object): pass
...
>>> type(Two)
<type 'type'>
Классы являются объектами первого класса: они являются экземплярами type
.Это имеет смысл, если вы посмотрите на следующий пример.
>>> two = Two()
>>> type(two)
<class '__main__.Two'>
Вы можете видеть, что класс очень четко функционирует как тип, потому что он может быть возвращен из type
.Вот еще один пример.
>>> Three = type('Three', (Two, ), {'foo': 'bar'})
>>> type(Three)
<type 'type'>
>>> three = Three()
>>> type(three)
<class '__main__.Three'>
Вы можете видеть, что type
- это класс, который может быть создан.Его конструктор принимает три аргумента: имя класса, кортеж базовых классов и словарь, содержащий атрибуты класса.Он возвращает новый type
aka class.
Что касается вашего последнего вопроса,
Что происходит, когда вы скорее передаете класс и экземпляр в метод?
Тебе нужно быть более конкретным.Классы - это просто экземпляры type
и объекты первого класса.Спрашивать, что произойдет, если я передам класс в метод, это все равно, что спросить, что произойдет, если я передам целое число в метод: все зависит от того, что ожидает метод.