[英]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.