簡體   English   中英

從python中的另一個類訪問屬性

[英]access attribute from another class in python

我是 python 新手,正在嘗試解決這個問題。 如果我的英語不是很好,我很抱歉。 對於這個問題,我不應該改變除了 dunder 調用之外的方法的參數。 我只粘貼了我遇到問題的代碼部分。 我正在嘗試在 Trip 類中使用 Passenger 類(self.load_weight)的屬性,但出現錯誤( TypeError: unsupported operand type(s) for -=: 'int' and 'Trip' )。 如何打印沒有任何錯誤的答案?

class Train:
    def __init__(self, weight_capacity):
        self.weight_capacity = weight_capacity


class Trip:
    def __init__(self, train):
        self.train = self.train_validation(train)

    def train_validation(self, train):
        self.train = train
        return self.train

    def __call__(self):
        self.trip = Passenger(self)
        self.train.weight_capacity -= self.trip.load_weight
        return self.train.weight_capacity

class Passenger:

    def __init__(self , load_weight):
        self.load_weight = load_weight

    def attend_trip(self, trip):
        self.trip = trip
    
train = Train(34286)
trip = Trip(train)
passenger1 = Passenger(616)
print(trip())

您的代碼的問題在於,在self.trip = Passenger(self)行中使用將 Train 對象作為參數傳遞。 也許這是一個錯誤類型,因為在Passenger 類中您將變量命名為load_weight 所以我假設你應該傳遞某種數字而不是類對象。

您的代碼沒有按預期工作的原因是因為在 Trip 類的call dunder 方法中,您正在實例化一個新的 Passenger 類實例,而不是使用下面實例化的乘客類; 加上您在 Trip 實例(最后 3 行)之后創建乘客實例本身的事實,

我對你的代碼做了一個小的重構,建議修改:

class Train:
    def __init__(self, weight_capacity):
        self.weight_capacity = weight_capacity


class Trip:
    def __init__(self, train):
        self.train = self.train_validation(train)
        
    def train_validation(self, train):
        self.train = train
        return self.train
    
    def __call__(self, passenger):
        self.trip = passenger
        self.train.weight_capacity -= self.trip.load_weight
        return self.train.weight_capacity


class Passenger:
    
    def __init__(self, load_weight):
        self.load_weight = load_weight
    
    def attend_trip(self, trip):
        self.trip = trip


train = Train(34286)
passenger1 = Passenger(616)
trip = Trip(train)
print(trip(passenger1)) 

暫無
暫無

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

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