簡體   English   中英

AttributeError:類型 object 'Student' 沒有屬性 'name'

[英]AttributeError: type object 'Student' has no attribute 'name'

前幾天開始學習python,想做一個簡單的class。 我的一個朋友,在 Python 中很有名,給我發這些斷言來測試我的程序。 運行程序時,我收到此錯誤:“AttributeError: type object 'Student' has no attribute 'name'” )我可以看到程序實際上創建了構造函數和 class 但不知何故它在通過斷言時找不到屬性“名稱”。

class Student:
    
    def __init__(self, name, uci_name, semester):
        self.name = name
        self.uci_name = uci_name
        self.semester = semester
    
    def get_name(self) -> str:
        return self.name
    
    def get_uci_name(self) -> str:
        return self.uci_name
    
    def get_semester(self) -> int:
        return self.semester
    
    def __str__(self):
        return f"{self.name} [{self.uci_name}] in Semester {self.semester}"

student_tom = Student("Tom", "tom55", 3)
    
assert isinstance(getattr(Student, "name"), property)
assert isinstance(getattr(Student, "uci_name"), property)
assert isinstance(getattr(Student, "semester"), property)

首先: class Student本身沒有您在此處檢查的屬性,它們僅在__init__中設置,就像名稱所暗示的那樣,在實例初始化時被調用(什么是self真的?實例。) , 但是,作為旁注,將您的getattr字符串更改為方法名稱,您將看到您不會得到任何AttributeError ,因為這些確實是 class 的屬性。 只是__init__里面的東西不是,因為它怎么可能呢? 所以解決這個問題的方法是檢查你的實例student_tom而不是 class 本身,因為這些屬性實際上已經設置好了。

其次:一旦你改變它來檢查實例,你會得到一個AssertionError代替(progress.)。 這意味着您要檢查的屬性不是properties ,這是 python 獨有的一種特殊類型的方法(閱讀:裝飾器),它消除了對 getter 的需求,這就是為什么您幾乎永遠不會看到傳統的 getter(或 setter,它們是以類似的方式構建)在pythonic代碼中。 強制雷蒙德赫廷格: https://youtu.be/HTLu2DFOdTg?t=2213

暫無
暫無

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

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