Python:无法复制 pygame 表面对象

我有一堂课:


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 中任何实例的值。我该怎么做?


编辑:我似乎也无法复制这个类,因为我收到一个类型错误,上面写着:“不能腌制 pygame.surface 对象”,因为我在该类中有一个表面对象的值。


慕村9548890
浏览 201回答 3
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'

呼如林

使用复制模块:函数 copy() 对任意 Python 对象的浅拷贝操作。import copyclass PersonInfo:    def __init__(self, name, age, height, hair_colour):        self.name = name        self.age = age        self.height = height        self.hairColour = hair_colourpersonArray = []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))

汪汪一只猫

我已经创建了 setter 和 getter 来获取数据。此外,您还可以创建保存数据的实例的副本。from copy import deepcopyclass PersonInfo:    def __init__(self,name,age,height,hairColour):        self.name = name        self.age = age        self.height = height         self.hairColour = hairColourx = PersonInfo("Mario",34,1.70,"blue")print(x.height)  # prints 1.70x1 = deepcopy(x)print(x1.age)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python