gpt4 book ai didi

python 使用附加数据创建整数类的方法

转载 作者:行者123 更新时间:2023-12-01 05:27:03 24 4
gpt4 key购买 nike

美好的一天!我正在考虑Python中的类来存储 map 图 block ,例如

map = [[WorldTile() for _ in range(10)] for _ in range(10)]

我创建类

class WorldTile:
def __init__(self, val):
self.resource = val
self.objects = dict()

def __repr__(self):
return self.resource

def __str__(self):
return '%s' % (str(self.resource))

def __cmp__(self, other):
return cmp(self.resource, other)

def __add__(self, other):
self.resource += other
return self.resource

def __sub__(self, other):
self.resource -= other
return self.resource

但是出了点问题。我试试

x = WorldTile.WorldTile(7)
print type(x), id(x), x
print x > 2, x < 5, x > 0
#x += 5
print type(x), id(x), x
print x, str(x), type(x)
print x.objects

它们工作正常,但如果我取消注释行 x += 5 x 成为 <type 'int'>

总的来说,我想要一个类,我可以作为整数工作( x = x +-*\ y 等),但如果需要的话也可以访问其他字段( x.objects )我想我需要重写 allocateemet 方法,但这在 python 中是不可能的。我还有什么办法吗?

最佳答案

您可以覆盖 __iadd__+=

但是,您当前的 __add__ 已损坏。您可以通过使其返回 WorldTile 的(新)实例而不是 int 来修复它:

def __add__(self, other):
return WorldTile(self.resource + other)

这适用于 ++=(处理 self.objects 留给读者作为练习)。

关于python 使用附加数据创建整数类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21115215/

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