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
,这有什么意义?也许这就是为什么你会有注释#无用代码
。为什么要在程序中添加无用的代码?为什么要用双下划线命名所有其他方法?你不应该把它用于你自己的方法。