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