Методы вызова ООП Python 3

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

0
задан jonrsharpe 10 March 2019 в 17:04
поделиться

2 ответа

Во-первых, подход на основе классов, хотя это не кажется оправданным.

class InitialAction:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def f1(self):
        ...

    def f2(self):
        ...

    def f3(self):
        ...


def f4(f, a, b):
    ...

x = InitialAction(some_a, some_b)

f4(x.f1)  # Implement f4 using f1
f4(x.f2)  # Implement f4 using f2
f4(x.f3)  # Implement f4 using f3

Причина, по которой вы на самом деле не нуждаетесь в InitialAction, заключается в том, что все, что он делает, - это содержит значения a и b, которые вы можете просто напрямую передать f4 себе. Вместо этого просто определите все четыре функции по отдельности, и тело f4 будет использовать f соответствующим образом, когда придет время.

def f1(a, b):
    ...

def f2(a, b):
    ...

def f3(a, b):
    ...

def f4(f, a, b):
    # Pass a and b to f when appropriate
    ...
0
ответ дан chepner 10 March 2019 в 17:04
поделиться

Нет абсолютно никаких причин для создания другого класса с тремя методами, которые не имеют никакой функциональности, кроме как для вызова методов, определенных в первом классе.

Предполагая, что вы на самом деле просто хотите обертку вокруг них, сработает следующее:

class InitialAction:
  @staticmethod
  def f1(a, b):
    ...
  @staticmethod
  def f2(a, b):
    ...
  @staticmethod
  def f3(a, b):
    ...

class Implement(object):
  def __init__(self, a, b):
    self.a = a
    self.b = b

  def callFn(self, fn):
      ...
      fn(self.a, self.b)
      ...

myobj = Implement('a', 'b')
myobj.callFn(InitialAction.f1)
0
ответ дан mhpcc 10 March 2019 в 17:04
поделиться
Другие вопросы по тегам:

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