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 ответов

18 просмотров

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

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

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

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

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

Tishka17
screenshot

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта