如何运行类函数



>我试图编写一些代码来获取多边形的边数,用户可以随机输入每条边的长度

我想创建一个单独的类多边形,以下是我的代码:

#numSides=int(input(Number of sides))
class polygon(object):
    def __init__(self,x):                                       #useless code
        self.x=x                                                            #useless code
        self.x=[]                                                           #useless code
    def __inputSides__(self):
        #counter=0
        #for i in range(x):
        #   counter=counter+1
        numSides=int(input("number of sides"))
        list_=[]
        for i in range(numSides):
            length=float(input("length"))
            list_.append(length)
        return list_
    def __dispSides__(self,list_):
        for i in list_:
            print("side length",i)
stone= polygon()
stone.__dispSides__(4)

但是在倒数第二行中,我收到一个错误,上面写着:

Traceback (most recent call last):
  File "python", line 23, in <module>
TypeError: __init__() missing 1 required positional argument: 'x'

我想知道如何解决这个问题以及为什么出现此错误?

谢谢!

一个合适的类不会提示用户输入边长;创建Polygon的代码应该负责 I/O,并简单地将值作为参数传递给 Polygon.__init__

class Polygon(object):
    def __init__(self, sides):
        self.sides = sides
    def display_sides(self):
        for s in self.sides:
            print("side length", s)

numSides = int(input("number of sides"))
sides = []
for i in range(numSides):
    length = float(input("length"))
    sides.append(length)
s = Polygon(sides)
s.display_sides()
这是一个

非常简单的问题。

每当您调用多边形类时,其__init__函数都会自动运行。您已将此启动函数设置为需要 2 个参数:self & x 。因此,每当你启动你的类时,你必须为你的课程提供一个x的参数。

意思不是声明stone = polygon(),而应该声明类似stone = polygon(x)的东西。

此外,传递和启动x参数的原因尚不清楚,因为无论给出什么值x,它都不会传递给类中的任何方法。这是因为在声明 self.x = x 后,它立即被您的self.x=[]声明覆盖为空列表(不使用实际的 x -参数(。

在相同的代码中,我应用了两个修复程序。希望你想要同样的结果。

class polygon(object):
def __init__(self,x=[]):                                       #useless code
    self.x=x       
# force user to input numSide and length
numSides=int(input("number of sides"))
list_=[]
for i in range(numSides):
    length=float(input("length"))
    list_.append(length)
#finally list_ argument is a declaration so you have to define it(assign value)
def __dispSides__(self,list_=list_):
    for i in list_:
        print("side length",i)

stone= polygon()
stone.__dispSides__()

修复1:__init__(self,x=[]):声明定义x以设置默认值

修复 2: def __dispSides__(self,list_=list_):在这里,您声明了一个变量list_但实际上您想在此处传递以前的list_值(看起来(,因此请传递一个值。

避免错误:stone.__dispSides__(4)# 传递非迭代对象将引发错误

最新更新