书籍:《PYTHON游戏编程入门》(More Python Programming for the Absolute Beginner)
本文为第一章后面的挑战题,欢迎交流
题目
第一题
题目
打开GeometryDemo.py程序,并且创建一个继承自Point 的新类,名为Ellipse。它有一个水平半径和垂直半径,而不是像Circle那样只有一个半径。
代码
# ch1 Question 1
# python 3.8.0
# pygame 1.9.6
#第一个基类,Point
# 这里的object是一切类的基类,也可不写,像Size类一样
class Point(object):
x = 0.0
y = 0.0
# 这里的变量需要赋初始值,否则会报错
def __init__(self, x=0.0 , y=0.0):
# 可以给参数设置初始值,但是变量定义那里的赋初值不可省
self.x = x
self.y = y
# 为了区分原本的成员和传入的参数,这里面使用self来标记
print('Point Constructor')
def ToString(self):
return "{X:" + str(self.x) + ",Y:" + str(self.y) + "}"
# 返回一个string
#第二个基类:Size
class Size():
width = 0.0
height = 0.0
def __init__(self, w, h):
self.width = w
self.height = h
# 如果原本的成员和传入的参数不同名,也需要用self来标记,否则就是新变量
print("Size Constructor")
def ToString(self):
return "{WIDTH=" + str(self.width) + \
",HEIGHT=" + str(self.height) + "}"
#子类Circle,继承自Point
class Circle(Point):
# 继承自Point类
radius = 0.0
def __init__(self, x, y, r):
super().__init__(x, y)
# 调用父类的构造函数,只有一个父类的情况下可以使用super()表示父类
#Point.__init__(self, x, y)
# 如果使用父类名字的话,则需要将self参数传进去
# 这里不能使用Point().__init__(x, y),因为它会生成一个新的Point对象
self.radius = r
print('Circle Constructor')
def ToString(self):
return super().ToString()