簡體   English   中英

Python 3 OOP調用方法

[英]Python 3 OOP Calling Methods

我的目標是實現具有3種變化的算法。 我決定創建3個獨立函數,並根據需要執行的操作在第4個函數中調用它們。 但是,我意識到,以這種方式執行任務將具有6個功能,其中3個具有初始動作,3個調用每個動作並執行特定任務(任務是相同的)。

我決定用Python來實現我的解決方案以適應它,並且我在考慮使用類和方法是否是一個好主意。 到目前為止,對我來說,每個解決方案都只是函數的定義,但我想改進。

到目前為止,這是我的邏輯(僅顯示實際上使我感到困惑的聲明):

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

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

  def f4_1(?)
    some_how_call_f1??
    ...
  def f4_2(?)
    some_how_call_f2??
  def f4_3(?)
    some_how_call_f3??

而且我不確定在{class InitialAction}的每個方法中是否有比使用(a,b)更有效的方法,因為它們是相同的。

首先,一種基於類的方法,盡管似乎沒有必要。

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的原因是,它所做的只是保存ab值,您可以直接將它們直接傳遞給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
    ...

絕對沒有理由使用三個沒有調用第一類中定義的方法的功能的方法來創建另一個類。

假設您實際上只是想要一個包裝紙,則可以使用以下方法:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM