Python:无法复制pygame曲面对象

2024-04-19 02:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一门课:

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))

我想将该类的实际变量(姓名、年龄、身高、头发颜色等)存储在一个我称为“personStorage”的变量中。然而,我不能让这个var是可变的,因为我需要访问这个var的值并更改它们。这样做不能更改personArray中任何实例的值。我该怎么做?你知道吗

编辑: 我似乎也不能复制这个类,因为我得到了一个类型错误,上面写着:“cannotpicklepygame.surface公司对象”,因为我在该类中有一个曲面对象的值。你知道吗


Tags: 对象实例nameimageselfagepngvar
3条回答

如果我明白你的意图:

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'

我创造了二传手和传接手来获得数据。还有您可以创建保存数据的实例的副本。你知道吗

from copy import deepcopy
class PersonInfo:
    def __init__(self,name,age,height,hairColour):
        self.name = name
        self.age = age
        self.height = height 
        self.hairColour = hairColour

x = PersonInfo("Mario",34,1.70,"blue")

print(x.height)//prints 1.70

x1 = deepcopy(x)

print(x1.age)

使用复制模块:

函数copy()对任意Python对象执行浅层复制操作。你知道吗

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))

相关问题 更多 >