![](/img/trans.png)
[英]place() takes from 1 to 2 positional arguments but 3 were given?
[英]takes from 3 to 5 positional arguments but 6 were given?
我的程序应该使用用户输入来绘制棋盘。 绘图必须通过调用 draw() 进行。 我收到一个错误:
line 18, in main
chessboard = Chessboard(tr, startX, startY, eval(width), val(height))
TypeError: __init__() takes from 3 to 5 positional arguments but 6 were given
问题是我的主模块无法更改。 我必须保持原样。 这是一个要求。 那么,当我无法改变它时,我该如何解决这个问题呢? 它只在第 18 行给我一个错误。
主模块:
import turtle
from chessboard import Chessboard
def main():
startX, startY = eval(input("Enter a starting point: "))
width = input("Input a width: ")
height = input("Input a height: ")
tr = turtle.Turtle()
if width == "" and height == "":
chessboard = Chessboard(tr, startX, startY)
elif height == "":
chessboard = Chessboard(tr, startX, startY, width=eval(width))
elif width == "":
chessboard = Chessboard(tr, startX, startY, height=eval(height))
else:
chessboard = Chessboard(tr, startX, startY, eval(width), eval(height))
chessboard.draw()
tr.hideturtle()
turtle.done()
main()
我留下我的 chessboard.py 模块,以防它必须对它做些什么:
import turtle
class Chessboard:
def __init__(self, startX, startY, width=250, height=250):
self.__startX = startX
self.__startY = startY
self.__width = width
self.__height = height
def draw(self, __startX, __startY, __width=250, __height=250):
turtle.clear
self.__drawChessboard(__startX, __startY, __width, __height)
def __drawChessboard(self, __startX, __startY, __width=250, __height=250):
# uses height x width, default 250
turtle.setheading(0)
turtle.penup()
turtle.goto(__startX, __startY)
turtle.pendown()
turtle.goto(__startX + __width, __startY)
turtle.goto(__startX + __width, __startY + __height)
turtle.goto(__startX, __startY + __height)
turtle.goto(__startX, __startY)
self.__drawAllRectangles(self, __startX, __startY, __width, __height)
turtle.exitonclick()
def __drawAllRectangles(self, __startX, __startY, __width, __height):
__checkerWidth = __width / 8
__checkerHeight = __height / 8
for row in range(8):
for column in range(4):
if row % 2 == 0:
self.__drawRectangle(self, __startX + (2 * column * __checkerWidth),
__startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
else:
self.__drawRectangle(self, __startX + __checkerWidth + (2 * column * __checkerWidth),
__startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
def __drawRectangle(self, __startX, __startY, __checkerWidth, __checkerHeight):
turtle.penup()
turtle.setheading(0)
turtle.goto(__startX, __startY)
turtle.fillcolor("black")
turtle.begin_fill()
turtle.pendown()
turtle.goto(__startX + __checkerWidth, __startY)
turtle.goto(__startX + __checkerWidth, __startY + __checkerHeight)
turtle.goto(__startX, __startY + __checkerHeight)
turtle.goto(__startX, __startY)
turtle.end_fill()
谢谢你的帮助!
每个 class 方法(包括 init)的第一个参数始终是对 class 的当前实例的引用。 按照惯例,这个参数总是命名为 self。 在init方法中,self指的是新创建的object; 在其他 class 方法中,它指的是调用其方法的实例。
编辑:我没有阅读你说你不能改变主模块的部分,我很抱歉
class Chessboard:
def __init__(self, tr, startX, startY, width=250, height=250):
self.tr = tr
self.__startX = startX
self.__startY = startY
self.__width = width
self.__height = height
def draw(self):
self.tr.clear()
self.__drawChessboard(self.__startX, self.__startY, self.__width, self.__height)
def __drawChessboard(self, __startX, __startY, __width=250, __height=250):
# uses height x width, default 250
self.tr.setheading(0)
self.tr.penup()
self.tr.goto(__startX, __startY)
self.tr.pendown()
self.tr.goto(__startX + __width, __startY)
self.tr.goto(__startX + __width, __startY + __height)
self.tr.goto(__startX, __startY + __height)
self.tr.goto(__startX, __startY)
self.__drawAllRectangles(__startX, __startY, __width, __height)
self.tr.exitonclick()
def __drawAllRectangles(self, __startX, __startY, __width, __height):
__checkerWidth = __width / 8
__checkerHeight = __height / 8
for row in range(8):
for column in range(4):
if row % 2 == 0:
self.__drawRectangle(__startX + (2 * column * __checkerWidth),
__startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
else:
self.__drawRectangle(__startX + __checkerWidth + (2 * column * __checkerWidth),
__startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
def __drawRectangle(self, __startX, __startY, __checkerWidth, __checkerHeight):
self.tr.penup()
self.tr.setheading(0)
self.tr.goto(__startX, __startY)
self.tr.fillcolor("black")
self.tr.begin_fill()
self.tr.pendown()
self.tr.goto(__startX + __checkerWidth, __startY)
self.tr.goto(__startX + __checkerWidth, __startY + __checkerHeight)
self.tr.goto(__startX, __startY + __checkerHeight)
self.tr.goto(__startX, __startY)
self.tr.end_fill()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.