[英]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.