Новый метод для класса вне определения класса - PullRequest
2 голосов
/ 20 октября 2019

Кто-нибудь знает в Python о более хорошем способе переопределения метода экземпляра объекта, который дал бы функции доступ к экземпляру класса (self) и всем его методам / свойствам?

Работает следующий метод, но почему-то мне не нравится, как использовать глобальную область для передачи объекта в new_f.

class A(object):
  def __init__(self):
    self.b = 10
  def f(self):
    return 2 + self.b
  def g(self):
    print(self.f())

a = A()

# simple override case
a.f = lambda: 10 
a.g()

# now I want to have access to property b of the object a
# but it also could be a method of object the object a
def new_f():
  self = a
  return 10+self.b

a.f = new_f
a.g()

1 Ответ

2 голосов
/ 20 октября 2019

Одним из возможных решений в зависимости от вашего варианта использования было бы определение функции с self в качестве аргумента, например def new_f(self), а затем define A.f = new_f до инициализации объекта a.

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