Python 如何运行类函数

Python 如何运行类函数,python,class,instance,Python,Class,Instance,我试着写一些代码,可以接受多边形的边数,用户可以随意输入每边的长度 我想创建一个单独的类多边形,下面是我的代码: #numSides=int(input(Number of sides)) class polygon(object): def __init__(self,x): #useless code self.x=x

我试着写一些代码,可以接受多边形的边数,用户可以随意输入每边的长度

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

#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'
回溯(最近一次呼叫最后一次):
文件“python”,第23行,在
TypeError:\uuuu init\uuuu()缺少1个必需的位置参数:“x”
我想知道如何修复此问题,以及为什么会出现此错误


谢谢

这是一个非常直截了当的问题

无论何时调用多边形类,它的
\uuuu init\uuu
函数都会自动运行。您已将此初始化函数设置为需要两个参数:
self
&
x
。因此,无论何时初始化类,都必须为类提供一个
x
参数

这意味着不应该声明
stone=polygon()
,而应该声明类似
stone=polygon(x)
的内容


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

适当的类不会提示用户输入边长;创建
多边形
的代码应负责I/O,并将值作为参数传递给
多边形

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()

在同一个代码中,我应用了两个修复程序。希望您希望得到相同的结果

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:
\uuuu init\uuuuu(self,x=[]):
使用声明定义x以设置默认值

修正2:
def\uuuu dispSides\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
在这里,您声明了一个variabelist,但实际上您想在这里传递上一个
list
值(看起来是这样),所以一定要传递一个值


避免错误:
stone.\uuu dispSides\uuu4
\u35;传递一个不可iterable将引发一个错误

错误消息很简单:您将
多边形
类定义为需要一个参数,但您没有提供参数。对于
\uu init(self,x)中的
x
参数,您需要一个
polygon()
参数
。不清楚您为什么需要该参数,因为在使用该参数后,您会用
self.x=[]
覆盖它。您从未在类中的任何其他地方使用过
self.x
,这有什么意义?也许这就是为什么你会有注释
#无用代码
。为什么要在程序中添加无用的代码?为什么要用双下划线命名所有其他方法?你不应该把它用于你自己的方法。