![](/img/trans.png)
[英]AttributeError: 'super' object has no attribute '__getattr__'
[英]AttributeError: 'super' object has no attribute
我寫了下面的代碼。 當我嘗試在文件末尾運行它時,得到以下堆棧跟蹤:
AttributeError: 'super' object has no attribute do_something
class Parent:
def __init__(self):
pass
def do_something(self, some_parameter, next_parameter):
if type(some_parameter) is not int:
raise AttributeError("Some message")
if type(next_parameter) is not int:
raise AttributeError("Some message")
class Child(Parent):
def __init__(self):
super(Parent).__init__()
def do_something(self, some_parameter, next_parameter):
super(Parent).do_something(some_parameter, next_parameter)
return some_parameter + next_parameter
object = Child()
object.do_something(2, 2)
我應該如何解決呢?在這個簡單的繼承示例中,我在哪里犯了錯誤?
您將錯誤的論點傳遞給super
。 如果您要傳遞參數,則它們必須是當前類和實例,而不是您希望調用的父類。 或者假設您使用的是Python 3,則可以完全跳過參數,編譯器將始終為您工作。 允許使用一個參數調用super
,但是它會返回一個“從未綁定的超級對象”,這幾乎是沒有用的。
更改您的呼叫以使用以下樣式之一:
class Child(Parent):
def __init__(self):
super().__init__() # no arguments is almost always best in Python 3
def do_something(self, some_parameter, next_parameter):
super(Child, self).do_something(some_parameter, next_parameter) # name the current class
return some_parameter + next_parameter
我還要注意,您在Parent.do_something
中的類型檢查相當尷尬。 而不是type(some_parameter) is not int
,而應使用isinstance(some_parameter, int)
(除非您有意排除子類型)。
您在這里有幾個問題。 首先,父do_something
定義存在縮進錯誤。 這意味着它被定義為本身的函數,而不是Parent
類的方法。
其次,類方法通常應將self
作為其第一個參數,因為當調用它們時,它們所引用的對象將作為第一個變量傳遞。
第三,當您調用super()
時,無需指定super是什么,因為那是Child
的類定義中固有的。
下面是代碼的固定版本,應能按預期執行。
class Parent:
def __init__(self):
pass
def do_something(self, some_parameter, next_parameter):
if type(some_parameter) is not int:
raise AttributeError("Some message")
if type(next_parameter) is not int:
raise AttributeError("Some message")
class Child(Parent):
def __init__(self):
super(Parent).__init__()
def do_something(self, some_parameter, next_parameter):
super().do_something(some_parameter, next_parameter)
return some_parameter + next_parameter
test = Child()
test.do_something(2, 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.