如何解决python创建父类函数作为哈希表
我希望我的班级被用作列表,因此我创建了魔术班
@dataclass
class Magic(Person):
position = []
def __new__(cls,pos,person):
if pos < len(cls.position):
return cls.position[pos]
if pos == len(cls.position)+1:
instance = cls.__new__(cls)# should create new class
cls.position.append(instance)
return instance
else:
raise Exception('out of bound')
def __getitem__(self,pos):
return self.position[pos]
这个类扩展Person类,应该包含内容
@dataclass
class Person(type):
age: int = 1
最后我想填满哈希
a = Magic()
a[0].age = 5
print(a)
我知道我应该在类上创建一个实例,但不明白如何 啊,我希望将在订单位置创建哈希表 我无法在 a[0].age =5 之前创建 a[1].age =5
澄清 虽然常规列表的行为类似于:
>>> a = list()
>>> a[0] = 5
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
IndexError: list assignment index out of range
如果我写这段代码,结果应该是
>>> a = Magic(Person)
>>> a[0].age = 5
>>> print(a)
[Person(age=5)]
并且该列表还应强制其索引连续性:
>>> a = Magic(Person)
>>> a[1].age = 5
Traceback (most recent call last):
File "<stdin>",line 2,in <module>
IndexError: list index out of range
解决方法
我想我自己解决了 一开始我想使用一种我不太熟悉的方法,所以我遇到了很多问题,但最后它起作用了!
人
class Person:
def __init__(self) -> object:
self.age = 10
魔法列表
class MagicList(Person):
def __init__(self):
self.position = []
Person.__init__(self)
def __getitem__(self,key) -> int:
if not self.position or len(self.position) == key:
self.__setitem__(key)
return self.position[key]
elif len(self.position) > key:
return self.position[key]
return None
def __setitem__(self,key):
if not self.position:
self.position.append(Person)
elif len(self.position)-1 >= key:
self.position[key] = Person
elif len(self.position) == key and Person != None:
self.position.append(Person)
并检查我的代码
a = MagicList(Person)
a[0].age = 5
print(a[0].age)
assert a[0].age == 5
a[1].age = 7
print(a[1].age)
assert a[0].age == 7
try:
a[4].age = 11
except AttributeError as ex:
print("Currect AttributeError age {}".format(ex))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。