class Square():
def __init__(self,side):
self.side = side
def area(self):
return self.side * self.side
class cube(Square):
def area(self):
return super().__init__().area() * 6
def volume(self):
return super().area() * self.side()
c = Square(4)
# print(c.area())
# print(c.volume())
d = cube(4)
print(d.area())
我們真的可以super().__init__().area()在 python 中使用這樣的方法嗎?如果是這樣,那是什么意思?上面的代碼拋出一個錯誤。
TypeError: __init__() missing 1 required positional argument: 'side'
然后,你能告訴我什么型別的引數,我們應該使用內部__init__和super()?
uj5u.com熱心網友回復:
super().__init__().area() * 6
不做,__init__必須回傳None或如__init__檔案所說
(...) 不能
None回傳非值__init__();這樣做會導致 aTypeError在運行時被引發。
并None沒有.area方法。
uj5u.com熱心網友回復:
我們真的可以
super().__init__().area()在 python 中使用這樣的方法嗎?如果是這樣,那是什么意思?
這沒有任何意義,因為它完全是胡說八道:super()讓您在超類背景關系中訪問方法和屬性,因此super().__init__()將呼叫超類' __init__(在__init__此之外是一個糟糕的主意),并且不回傳任何內容,因此失敗。
然后,你能告訴我什么型別的引數,我們應該使用內部
__init__和super()?
這個問題本身是錯誤的,因為它的所有假設都是錯誤的。如果你想呼叫超類,area你只需:
def area(self):
return super().area()
雖然這里的繼承關系沒有意義,但正方形和立方體之間沒有“是一個”關系,它們不能相互替代。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314633.html
