gpt4 book ai didi

python - 将静态方法与享元装饰器一起使用时出错

转载 作者:行者123 更新时间:2023-12-01 09:18:40 25 4
gpt4 key购买 nike

我有一个用于制作 Sprite 蝇量级的类,并且我正在使用装饰器来调用此类。这是一些代码:

class flyweight:
def __init__(self, cls):
self._cls = cls
self.__instances = dict()

def __call__(self, title):
return self.__instances.setdefault((title), self._cls(title))

在这个问题中,我将简化代码以显示相关内容。

@flyweight
class Sprite:
def __init__(self, title, surf=None):
self.title = title
self.surf = surf if surf is not None else pygame.image.load('Images/Sprites/'+title+'.png').convert_alpha()
self.w, self.h = self.surf.get_size()

@staticmethod
def from_colour(colour, size=(40,40)):
surf = pygame.Surface(size).convert(); surf.fill(colour)
return Sprite(colour, surf)

red = Sprite.from_colour((125,0,0))

但这给了我错误:

AttributeError: 'flyweight' object has no attribute 'from_colour'

我应该 reshape 我的享元实现还是有办法解决这个问题?

最佳答案

一旦被装饰,被包装对象的名称会自动指向装饰器的返回结果。在这种情况下,Sprite现在存储 flyweight 的实例,它又包含一个存储原始包装类的实例的属性 Sprite 。例如,打印Sprite声明后给出:<__main__.flyweight object at 0x102373080> 。然而,staticmethod from_colour可以从 _cls 调用:

red = Sprite._cls.from_colour((125,0,0))

关于python - 将静态方法与享元装饰器一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50995683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com