繁体   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