簡體   English   中英

python 中的多個 inheritance 的 AttributeError 問題

[英]AttributeError Problem with Multiple inheritance in python

我想計算 python 中具有多重繼承的學生的總分和平均分。 但是,每當我為我的孩子 class 創建一個 object 時,它讓我可以訪問父類的所有方法,但是當我調用孩子 class 的方法時會顯示 AttributeError。 我嘗試使用 super() function 但結果是一樣的。

我只是在下面粘貼我的代碼。 你能建議我解決這個問題嗎?

class Student_Marks:
    def __init__(self):
        # initializing variables
        self.__roll: int
        self.__marks1: int
        self.__marks2: int
    
    def getMarks(self):
        self.__roll = int(input("Enter Roll No: "))
        self.__marks1, self.__marks2 = map(int, input("Enter Marks: ").split())

        return self.__roll, self.__marks1, self.__marks2


class Cocurricular_Marks:

    def __init__(self):
        self.__activemarks: int
    

    def getActiveMarks(self):
        self.__activemarks = int(input("Enter Co Curricular Activities Marks: "))

        return self.__activemarks


class Result(Student_Marks, Cocurricular_Marks):
    def __init__(self):
        super().getMarks()
        super().getActiveMarks()

    def display(self):
        total = self.__marks1 + self.__marks2 + self.__activemarks
        avg  = total / 3

        print("Roll No: ", self.__roll)
        print("Total Marks: ", total)
        print("Average Marks: ", avg )


# creating Objects
res = Result()

res.getMarks()

res.getActiveMarks()

res.display()      # I got problem here

您在類中為屬性添加兩個下划線,這會破壞屬性的名稱(請參閱Private Variables上的文檔)。

例如,當您退出 getMarks 時, Student_Marks__roll將被_Student_Marks__rollgetMarks

因此Result.display()無法訪問self.__marks1 ,但它可以作為self._Student_Marks__marks1訪問它。

請參閱以下最小示例。

class K:
    __a = 1

class KK(K):
    pass

k = K()
k.__a  # AttributeError: 'K' object has no attribute '__a'
k._K__a  # 1

kk = KK()
kk._K__a  # 1

暫無
暫無

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

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