170 похожих чатов

Вопрос: как в Python работают атрибуты, а так же есть

ли разница между обычными функциями и методами? То есть, будет ли разница между присвоением атрибута через метод класса и просто созданием нового атрибута извне? Будет ли разница между определением метода при определении класса и созданием функции и присвоения её классу в качестве метода? Есть ли разница между методом класса и методом, присвоенным объекту?
Примеры:

#1
class Test:
def __init__(self):
self.a=True
test=Test()

#2
class Test:
pass
test=Test()
test.a=True

#3
class Test:
def f(self):
print("Test")
test=Test()
test.f()

#4
class Test:
pass
def f(cls):
print("Test")
Test.f=f
test=Test()
test.f()

#5
class Test:
pass
def f(self):
print("Test")
test=Test()
test.f=f
test.f()

Будет ли разница в производительности или использовании памяти между первым и вторым вариантом? Между третьим, четвёртым и пятым?

8 ответов

14 просмотров

Очевидно во втором кастомная функция инит что-то будет есть в памяти

По памяти скорее всего третий на несколько байт больше будет есть из-за дескриптора

Второй быстрее чем первый, по памяти, думаю, одинаково По поводу остального - если не брать в счёт определение класса, то зависит от количества нативного кода __setattr__ у type и object

Tishka17
По памяти скорее всего третий на несколько байт бо...

Дескриптор есть у любой функции и он сработает во всех случаях

Tishka17
screenshot

Я вот не помню, есть ли в __getattribute__ у type логика для тригерра дескрипторов, но у object точно есть

Slam!
Я вот не помню, есть ли в __getattribute__ у type ...

Да, окей. Я чёт думал это при создании класса

S0ZDATEL- Автор вопроса

То есть пятый вариант быстрее третьего?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта