Python:无法复制pygame表面对象

时间:2019-04-09 16:28:42

标签: python class copy

我有一堂课

class personInfo:
    def __init__(self,name,age,height,hairColour,face):
        self.name = name
        self.age = age
        self.height = height 
        self.hairColour = hairColour
        self.face = face

我在这里使用pygame模块加载了几张图片。

yellowFace = pygame.image.load("happy.png")
blueFace = pygame.image.load("sad.png")
redFace = pygame.image.load("angry.png")

我创建了一个包含该类实例的数组。我在这里填充它。

personArray = []
while len(array) != 10:
    personArray.append(personClass("John",32,6,"Blond",yellowFace))

我想将该类的实际变量(名称,年龄,身高,hairColour等)存储在一个变量中,我将其称为“ personStorage”。但是,我不能让该变量可变,因为我需要访问该变量的值并更改它们。这样做不能更改personArray内部任何实例的值。我该怎么做?

编辑: 我似乎也无法复制此类,因为我收到一个类型错误,指出:“不能腌制pygame.surface对象”,因为我在该类中具有Surface对象的值。

3 个答案:

答案 0 :(得分:1)

如果我了解您要执行的操作:

class PersonInfo:
    def __init__(self,name,age,height,hairColour):
        self.name = name
        self.age = age
        self.height = height 
        self.hairColour = hairColour
    def toList(self):
        return [self.name, self.age, self.height, self.hairColour]

顺便说一句,类名的首字母始终是大写。

编辑:要实现您要执行的操作:

    old = PersonInfo("old", 1, 2, "blue")
    new = PersonInfo(*old.toList())
    new.name = "new"
    print(old.name) #'old'

答案 1 :(得分:0)

我已经创建了setter和getter来获取数据。此外,您还可以创建保存数据的实例的副本。

position:relative

答案 2 :(得分:0)

使用复制模块:

对任意Python对象的函数copy()浅表复制操作。

import copy


class PersonInfo:
    def __init__(self, name, age, height, hair_colour):
        self.name = name
        self.age = age
        self.height = height
        self.hairColour = hair_colour


personArray = []
for x in range(20, 24):
    personArray.append(PersonInfo("John", x, 6, "Brown"))


personStorage = copy.copy(personArray[2])
personStorage.name = "Ana"

print("\rpersonArray[2].name is %s\n"
      "\rpersonStorage.name is %s"
      % (personArray[2].name, personStorage.name))