我有一个像这样定义的父类和两个子类
import pygame
class Person():
def __init__(self):
self.image = pygame.image.load('person.png').convert_alpha()
self.image = pygame.transform.scale(self.image,
(int(self.image.get_width() * 0.5),
int(self.image.get_height() * 0.5)))
print('size: ', self.image.get_size())
class Teacher(Person):
def __init__(self):
super().__init__()
self.image = pygame.image.load('teacher.png').convert_alpha()
class Doctor(Person):
def __init__(self):
super().__init__()
self.image = pygame.image.load('doctor.png').convert_alpha()
self.image = pygame.transform.scale(self.image,
(int(self.image.get_width() * 1.2),
int(self.image.get_height() * 0.75)))
...
person.png
、teacher.png
和doctor.png
的图片尺寸分别为98x106、134x179和97x178。
当我运行以下代码时,它的输出让我感到困惑。子类
pygame.image.load()
和pygame.transform.scale()
中的代码Teacher
和Doctor
似乎没有覆盖父类Person
中定义的属性。
pygame.display.set_mode((500, 500))
players = {'Teacher': Teacher(), 'Doctor': Doctor()}
Output:
pygame 2.4.0 (SDL 2.26.4, Python 3.10.9)
Hello from the pygame community. https://www.pygame.org/contribute.html
size: (49, 53) <---- expected to be (62, 86)
size: (49, 53) <---- expected to be (116, 133)
发生什么事了?我做错了什么?
这取决于一切执行的顺序:
在子类中,您调用超级构造函数(super().init()),它仍然会加载图片 person.png 并输出大小。只有之后子类的构造函数中的代码才会被执行。因此,在构建之后,图像属性应该设置正确,但在打印输出时却并非如此。