ли разница между обычными функциями и методами? То есть, будет ли разница между присвоением атрибута через метод класса и просто созданием нового атрибута извне? Будет ли разница между определением метода при определении класса и созданием функции и присвоения её классу в качестве метода? Есть ли разница между методом класса и методом, присвоенным объекту?
Примеры:
#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()
Будет ли разница в производительности или использовании памяти между первым и вторым вариантом? Между третьим, четвёртым и пятым?
Очевидно во втором кастомная функция инит что-то будет есть в памяти
По памяти скорее всего третий на несколько байт больше будет есть из-за дескриптора
Второй быстрее чем первый, по памяти, думаю, одинаково По поводу остального - если не брать в счёт определение класса, то зависит от количества нативного кода __setattr__ у type и object
Дескриптор есть у любой функции и он сработает во всех случаях
Я вот не помню, есть ли в __getattribute__ у type логика для тригерра дескрипторов, но у object точно есть
Да, окей. Я чёт думал это при создании класса
То есть пятый вариант быстрее третьего?
Обсуждают сегодня