簡體   English   中英

Python,引用基類中的子屬性和方法(反之亦然)必須有更好的方法

[英]Python, Referencing child attributes and methods in base class (and vice versa) there has to be a better way

我有一個由多個子類繼承的基類。 這個基類有一個方法calc_func(self),它在子類中使用統一命名的方法func(self)。 這可行,但如果代碼變得越來越復雜,這個“架構”將很難遵循。

# Base class
class base():
    x = 12  
    def calc_func(self):
        for i in range(1,4):
            self.y += self.func() 
            # neither y nor func() are defined here so
            # it is hard to know where they came from


# Child class 1
class child1(base):
    y = 10
    def __init__(self):
        pass

    def func(self):   # method used in base class
        self.x += self.y
        print self.x
        return self.x
        # x was not defined here so it is
        # hard to know where it came from

# Child class 2
class child2(base):
    y = 15
    def __init__(self):
        pass

    def func(self):   # method used in base class
        self.x *= self.y
        print self.x
        return self.x
        # x was not defined here so it is
        # hard to know where it came from

test1 = child1()  # Create object
test1.calc_func() # Run method inherited from base class


test2 = child2()  # Create another object
test2.calc_func() # Run method inherited from base class

我們的想法是將公共代碼抽象出基類,但這似乎不是正確的方法。 也許通過使用引用其特定原始類的方法和屬性的命名約定,可以使這更容易理解? 也許完全不同的架構? 任何建議將不勝感激。

這個基類有一個方法calc_func(self),它在子類中使用統一命名的方法func(self)。 這可行,但如果代碼變得越來越復雜,這個“架構”將很難遵循。

不,這正是面向對象的多態性應該如何工作的。 你已經做對了!

你說這似乎很難理解,但不清楚為什么你認為這很困難。 可能你唯一能做的就是(a)將基類標記為抽象 (b)將子類應該提供的所有方法都存在於基類中,但只有它們引發NotImplementedError

暫無
暫無

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

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