__repr__ 不打印 Python 类的任何输出

问题描述 投票:0回答:1

Python 类的新手,在类的实例上调用 repr() 时,我没有得到预期的结果。这是我在正在学习的课程中提出的一个愚蠢示例的代码。至于实例,一切都是编造的,与现实不符。为了简洁起见,我删除了一些属性。这就是我到目前为止所得到的。

class Vehicle:
    make=None
    model=None
    
    def __init__(self, make, model):
        self.make  = make
        self.model = model
        
    def __str__(self):
        return f"{self.make}, {self.model}"
    
    def __repr__(self):
        return (f"Vehicle(make={self.make}, model={self.model}")


class Car(Vehicle):
    def __init__(self, make, model, numGears, numDoors):
        super().__init__(make, model)
        self.numGears = numGears
        self.numDoors = numDoors

    def __str__(self):
        return f"{self.make}, {self.model}, {self.numGears}, {self.numDoors}"
  
    def __repr__(self):
        return (f"Car(make={self.make}, model={self.model}, numGears={self.numGears}, numDoors={self.numDoors}")

Vantage = Car('Audi', 'Vantage', 6, 3)
Shield = Car('Audi', 'Shield', 160, 5, 5)

问题就在这里。我希望能够选择车辆类型(汽车、卡车、船、自行车,为了简洁起见,没有包括它们),然后我希望能够选择品牌,并根据选择,仅打印/可视化与该品牌相关的模型。这是我想到的:

if type == vehicleTypes[0]: # Selects Cars
    print(f'Available makes: {carMakes[0]}, {carMakes[1]}, {carMakes[2]}, {carMakes[3]}, {carMakes[4]}') #carMakes is a list of all available makes
    make=input('Select a make: ').title()
    if make == carMakes[0]:
        repr(Vantage)
        repr(Shield)

但是代码不会打印/显示任何内容,我必须如下替换对 repr() 的两个调用才能实际访问这两个实例的属性(我也尝试过使用 str() 但也没有任何乐趣):

if type == vehicleTypes[0]:
    print(f'Available makes: {carMakes[0]}, {carMakes[1]}, {carMakes[2]}, {carMakes[3]}, {carMakes[4]}')
    make=input('Select a make: ').title()
    if make == carMakes[0]:
        print(f'Make: {Vantage.make}, Model: {Vantage.model}, Number of gears: {Vantage.numGears}, Number of doors: {Vantage.numDoors}')
        print(f'Make: {Shield.make}, Model: {Shield.model}, Number of gears: {Shield.numGears}, Number of doors: {Shield.numDoors}')
    

我遇到了类似的问题,但找不到任何适用的问题。如果我在“if”块之外的这两个实例之一上调用 repr() 和/或 str() ,它们都可以正常工作。 感谢您的任何见解。

python class attributes repr
1个回答
0
投票

repr
返回一个字符串,表示传递给它的对象。如果你想打印出来,你需要调用
print
就可以了:

print(repr(Vantage))
print(repr(Shield))
© www.soinside.com 2019 - 2024. All rights reserved.