object.__new__
Конструирует экземпляр класса.
object.__new__(cls[, ...])
-> object
cls -- Ссылка на тип (класс), для которого запрошено конструирование объекта.
... -- Позиционные и/или именованные аргументы, играющие роль в процессе конструирования экземпляра. Это те самые аргументы, которые переданы в вызов класса.
... -- Позиционные и/или именованные аргументы, играющие роль в процессе конструирования экземпляра. Это те самые аргументы, которые переданы в вызов класса.
На заметку
Метод служит в основном для модификации процесса создания как экземпляра класса, а так и самого класса. Для последнего случая он может быть определён в метаклассе.
class Something:
def __new__(cls, *args, **kwargs):
print(f'конструируем: {args} | {kwargs}')
instance = super().__new__(cls)
# и вдруг нам захотелось добавить атрибут на лету
instance.new_attribute = 'добавлено'
print('почти готово')
return instance
def __init__(self, *args, **kwargs):
print(f'инициализируем: {args} | {kwargs}')
print(self.new_attribute)
my_obj = Something('раз', other=4)
# конструируем: ('раз',) | {'other': 4}
# почти готово
# инициализируем: ('раз',) | {'other': 4}
# добавлено
my_obj.new_attribute # 'добавлено'
На заметку
Метод является статическим, но для простоты Python позволяет не указывать @staticmethod явно.
Ожидается, что результатом
__new__()
будет объект. Обычно это экземпляр класса cls
, который создаётся вызовом родительского __new__()
. Если возвращён объект, то в последующем для него будет вызван __init__(). При этом первым аргументом (self
) для этого __init__()
станет упомянутый созданный экземпляр, а остальными аргументами станут переданные при вызове класса.Внимание
Если метод возвращает None, то
__init__()
не вызывается.
Синонимы поиска: object.__new__, object, __new__, __туц__
В разделе «object (объект)»:
file (файл)
object.__add__
object.__bool__
object.__call__
object.__ceil__
object.__class__
object.__cmp__
object.__contains__
object.__copy__
object.__deepcopy__
object.__del__
object.__delattr__
object.__delete__
object.__delitem__
object.__delslice__
object.__dir__
object.__enter__
object.__eq__
object.__exit__
object.__floor__
object.__format__
object.__ge__
object.__get__
object.__getattr__
object.__getattribute__
object.__getitem__
object.__getslice__
object.__getstate__
object.__gt__
object.__hash__
object.__init__
object.__init_subclass__
object.__iter__
object.__le__
object.__len__
object.__lt__
object.__missing__
object.__ne__
object.__next__
object.next
object.__nonzero__
object.__qualname__
object.__rcmp__
object.__repr__
object.__reversed__
object.__set__
object.__setattr__
object.__setitem__
object.__set_name__
object.__setslice__
object.__setstate__
object.__slots__
object.__str__
object.__sub__
object.__subclasses__
object.__unicode__
property (свойство)
Protocols (протоколы)
slice (срез)
Встроенные исключения
На заметку
У нас есть представительство во ВКонтакте. Ссылка в самом низу страницы.