如何运行类函数

时间:2018-01-12 21:01:58

标签: python class instance

我试图编写一些代码,这些代码会占用多边形的边数,用户可以随意输入每边的长度

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

#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'

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

谢谢!

3 个答案:

答案 0 :(得分:1)

正确的班级不会提示用户边长; 创建 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()

答案 1 :(得分:0)

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

每当调用多边形类时,其__init__函数都会自动运行。您已将此启动功能设置为需要2个参数:self&amp; x。无论何时开始上课,您都必须为您的班级提供x参数。

您应该声明类似stone = polygon()的内容,而不是声明stone = polygon(x)

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

答案 2 :(得分:0)

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

from django.contrib import admin
from .models import (Author, Book, Narrator, Audiobook)

# Register your models here.

admin.site.register(Author, Book)
admin.site.register(Narrator, Audiobook)

修复1: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__() 使用声明定义x以设置默认值

修复2: __init__(self,x=[]): 在这里你声明了一个变量 list _ ,但实际上你想在这里传递先前的def __dispSides__(self,list_=list_):值(看起来如此),所以请传递一个值。

避免错误:list_#传递非迭代会引发错误