добавить метод к загружаемому классу / модулю в python

если у меня есть что-то вроде

import mynewclass 

Могу ли я добавить какой-то метод в mynewclass? Что-то вроде следующего в концепции:

 def newmethod(self,x): return x + self.y mynewclass.newmethod = newmethod 

(Я использую CPython 2.6)

2 Solutions collect form web for “добавить метод к загружаемому классу / модулю в python”

В Python оператор import используется для модулей, а не для классов … поэтому для импорта класса вам нужно что-то вроде

 from mymodule import MyClass 

Отвечая на вопрос, да. В классах Python используются только обычные объекты, а метод класса – это просто функция, хранящаяся в атрибуте объекта.

Атрибуты экземпляров объектов в Python, кроме того, являются динамическими (вы можете добавлять новые атрибуты объекта во время выполнения), и этот факт в сочетании с предыдущим означает, что вы можете добавить новый метод к классу во время выполнения.

 class MyClass: def __init__(self, x): self.x = x ... obj = MyClass(42) def new_method(self): print "x attribute is", self.x MyClass.new_method = new_method obj.new_method() 

Как это может работать? Когда вы вводите

 obj.new_method() 

Python сделает следующее:

  1. искать new_method внутри объекта obj .

  2. Не найдя его как атрибут экземпляра, он попытается найти внутри объекта класса (который доступен как obj.__class__ ), где он найдет эту функцию.

  3. Теперь есть немного обмана, потому что Python заметит, что найденное является функцией и поэтому будет «обертывать» ее в закрытии, чтобы создать так называемый «связанный метод». Это необходимо, потому что когда вы вызываете obj.new_method() вы хотите вызвать MyClass.new_method(obj) … другими словами, привязка функции к obj для создания связанного метода – это то, что заботится о добавлении параметра self .

  4. Этот связанный метод – это то, что возвращается obj.new_method , и тогда это будет окончательно вызвано из-за окончания () в этой строке кода.

Если поиск класса также не выполняется, вместо этого родительские классы также выполняются в определенном порядке, чтобы найти унаследованные методы и атрибуты, и поэтому все немного сложнее.

Да, если это тип Python. За исключением того, что вы делаете это на классе, а не на модуле / пакете.

  • Как удалить пакет, установленный с помощью pip install --user
  • Python - нужно перебирать каталоги, ищущие TXT-файлы
  • Как сделать python изящно терпит неудачу?
  • Как перенаправить вывод «print» в файл с помощью python?
  • Исправление путей «../../» в python
  • Как отсортировать все возможные слова из строки?
  • Ошибка Nump в Python
  • Не работает кеш Google App Engine Edge Cache
  • Python - лучший язык программирования в мире.