【问题标题】:AttributeError: 'int' object has no attribute 'display'AttributeError:“int”对象没有属性“display”
【发布时间】:2020-03-26 14:55:43
【问题描述】:

我正在尝试编写一个程序,将数字随机分配给三个不同的列表,然后在不同类的帮助下,调用函数“display()”,并显示各种结果。我有我的类和随机化的循环,但每次我尝试打印 display() 结果时,我都会收到一个错误,说没有属性“显示”。我已尝试更改变量名称以查看是否有帮助,但错误仍然存​​在。

我的代码是:

    class Circle():
    def __init__(self, radius=1):
        self.__radius = radius

    def find_area(self):
        a = self.__radius * self.__radius * 3.142
        return(a)

    def setRadius(self, rad):
        self.__radius = rad

    def getRadius(self):
        return(self.__radius)

    def display(self):
        print("\nClass = Circle")
        print("The area for this circle is:\t")
        return(self.find_area())

class Square():
    def __init__(self, sside=2.3):
        self.__sside = sside

    def find_area(self):
        a = self.__sside * self.__sside 
        return(a)

    def setSSide(self, lw):
        self.__sside = lw

    def getSSide(self):
        return(self.__sside)

    def display(self):
        print("\nClass = Square")
        print("The area for this square is:\t")
        return(self.find_area())

class Cube():
    def __init__(self, cside=2):
        self.__cside = cside

    def find_surfacearea(self):
        sa = 6 * self.__cside * self.__cside
        return(sa)

    def setCSide(self, lwh):
        self.__cside = lwh

    def getCSide(self):
        return(self.__cside)

    def display(self):
        print("\nClass = Cube")
        print("The area for this cube is:\t")
        return(self.find_surfacearea())

x1 = Circle()
print(x1.display())

x2 = Square()
print(x2.display())

x3 = Cube()
print(x3.display())

#Lists and Loops
circlelist = []
squarelist = []
cubelist = []

circlecount = 0
squarecount = 0
cubecount = 0

for i in range (10):
    shape = random.randint(1, 3)
    number = random.randint(0, 10)

    if shape == 1:
        print("\n*Circle*")
        circlecount += 1
        circlelist.append(number)

    elif shape == 2:
        print("\n*Square*")
        squarecount += 1
        squarelist.append(number)

    else:
        print("\n*Cube*")
        cubecount += 1
        cubelist.append(number)

"""x = len(circlelist)
y = len(squarelist)
z = len(cubelist)

for i in range (x):
    circlelist[i].display()
    #print()

for i in range (y):
    squarelist[i].display()

for i in range (z):
    cubelist[i].display()"""

print("\nThe items in the circle list are:", circlelist)
print(len(circlelist))
print("The items in the square list are:", squarelist)
print(len(squarelist))
print("The items in the cube list are:", cubelist)
print(len(cubelist))

for i in range (len(circlelist)):
    circlelist[i].display()

"""for i in range (10):
    circlelist.display()
    squarelist.display()
    cubelist.display()"""

有人可以帮我看看哪里出错了吗?

【问题讨论】:

  • circlelist 是一个数字列表 (circlelist.append(number))。数字没有 display() 函数。您的 3 个类具有该功能,但您不能在使用该类创建的对象之外使用该功能。
  • 那么我将如何对列表中的每个数字使用 display() 呢?我对此比较陌生。
  • 你只是想显示数字,还是想运行你课堂上的那个功能?
  • 我想运行我课堂上的函数。我可以打印包含所有项目的列表,但我不知道如何调用这些类并将它们用于这些项目。
  • 看看我的回答,看看能不能回答你的问题

标签: python arrays list loops class


【解决方案1】:

目前,您的列表只是数字列表。您不能在数字上运行 display() 函数,它必须在您的一个对象上运行。这需要一个相对简单的改变。与其拥有一个数字列表,不如拥有一个对象列表。

在下面的代码中,我对其进行了更改,而不是在列表中附加一个数字,而是在适当的时候附加一个随机数作为半径、sside、cside 的新对象。

for i in range (10):
    shape = random.randint(1, 3)
    number = random.randint(0, 10)

    if shape == 1:
        print("\n*Circle*")
        circlecount += 1
        circlelist.append(Circle(radius=number))

    elif shape == 2:
        print("\n*Square*")
        squarecount += 1
        squarelist.append(Square(sside=number))

    else:
        print("\n*Cube*")
        cubecount += 1
        cubelist.append(Cube(cside=number))

如何编辑__init__ 函数以在创建时显示:

    def __init__(self, radius=1):
        self.__radius = radius
        self.display()

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 2021-11-30
    • 2013-04-15
    • 2021-01-18
    • 2019-05-30
    • 2021-02-24
    • 2021-08-01
    • 2015-07-06
    • 2018-03-17
    相关资源
    最近更新 更多