运行为什么会报错KeyError: 'X'
来源:2-6 编程练习
thinkwinter
2019-03-28 22:18:04
class Point(object):
# 自定义Point类的构造(初始化)方法
def __init__(self, x, y):
self.x = x
self.y = y
# 自定义Point类对象的格式化输出函数(string())
def string(self):
print("该图形初始化点为{X:{0},Y:{1}}".format(self.x, self.y))
class Circle(Point):
# 自定义Circle类的构造(初始化)方法
def __init__(self, x, y, radius):
super(Circle, self).__init__(x, y)
#Point.__init__(self, x, y)
self.radius = radius
# 自定义Circle类对象的格式化输出函数(string())
def string(self):
print("该图形初始化点为X:{0},Y:{1},半径为:{2}".format(self.x, self.y, self.radius))
class Size(object):
# 自定义Size类的构造(初始化)方法
def __init__(self, width, height):
self.width = width
self.height = height
# 自定义Size类对象的格式化输出函数(string())
def string(self):
print("该图形初始化点为{width:{0},height:{1}}".format(self.width, self.height))
class Rectangle(Point, Size):
# 自定义Rectangle类的构造(初始化)方法,并在方法中调用父类的初始化方法以完成初始化
def __init__(self, x, y, width, height):
#super(Rectangle, self).__init__(x, y)
#super(Point, self).__init__(width, height)
Point.__init__(self,x, y)
Size.__init__(self, width, height)
# 自定义Rectangle类对象的格式化输出函数(string())
def string(self):
#print("该图形初始化点为:X:{0},Y:{1},半径为:{2},width:{2},height:{3}".format(self.x, self.y, self.width, self.height))
print("该图形初始化点为:{X:{0},Y:{1}},半径为:{2},width:{2},height:{3}".format(self.x, self.y, self.width, self.height))
if __name__ == "__main__":
# 实例化Circle对象,圆心为(5,5),半径为8
circle = Circle(5, 5, 8)
circle.string()
# 实例化Rectangle对象,顶点位置(15,15),长和宽分别为15和15
rectang1 = Rectangle(15, 15, 15, 15)
rectang1.string()
# 实例化Rectangle对象,顶点位置(40,30),长和宽分别为11和14
rectang2 = Rectangle(40, 30, 11, 14)
rectang2.string()
1回答
慕猿梦
2019-03-29
同学,你好,KeyError: 'X'错误的原因是由于Rectangle类的string方法中{X:{0},Y:{1}}最外层的花括号被format当成了变量进行填充,使用下面方法将非变量的{}修改成{{}},不再报错。
使用str.format输出花括号时:两个左花括号输出左花括号本身,两个右花括号输出右花括号本身。
长方形没有半径之说,所以该string方法中,就不需要半径为:{2}的字符串了
如果我的回答解决了你的疑惑,欢迎采纳!!祝学习愉快~~~~~
相似问题