Функция члена класса - PullRequest
       5

Функция члена класса

1 голос
/ 13 марта 2019

Скажем, у меня есть некоторый класс с функцией-членом, которая используется не слишком часто, но определение которой довольно длинное

class foo:
    # ...
    fn():
        print('This function is called rarely but its definition is quite lengthy')
    # ...

В какой-то момент в майской программе я хочу создать миллионы экземпляров класса foo, и я хочу, чтобы это занимало как можно меньше места в памяти. Длинная функция fn также как-то скопирована миллион раз? В этом случае было бы лучше определить внешнюю функцию, которую я приведу в качестве входной информации. Если он не копируется миллионы раз, я бы предпочел оставить его как функцию-член.

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

Метод экземпляра фактически является членом класса.Когда интерпретатор Python видит такую ​​конструкцию, как obj.method(params, ...), он (более или менее) переводит ее как (obj.__class__).method(obj, params, ...).Он ищет элемент method в классе obj и вызывает его после добавления (ссылки на) самого объекта.

TL / DR: методы не копируются в объекты экземпляра, поэтому выможет безопасно держать вас в качестве метода.

1 голос
/ 13 марта 2019

Методы, объявленные на уровне класса, являются общими для всех экземпляров, как и переменные класса, поэтому вам не нужно беспокоиться о том, что методы занимают больше памяти, когда создается больше экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...