我想创建一个可以接受字典作为参数的类(“ MyClass”):
>>> d = {'key1', 'value1', 'key2', 'value2'}
>>> obj = MyClass(d)
字典键可以作为属性访问:
>>> obj.key1
'value1'
可以像属性一样设置字典键:
>>> obj.key2 = 'a new value'
>>> obj.key2
'a new value'
如果访问不在字典中的键,则会引发异常:
>>> obj.key3
AttributeError: 'MyClass' object has no attribute 'key3'
还有一些不在字典中但可以设置的有效属性。 MyClass会在内部了解它们。
>>> obj.valid_attribute1 = 'this is a valid attribute'
不允许使用其他属性(无效):
>>> obj.invalid_attribute = 5
AttributeError: 'MyClass' object has no attribute 'invalid_attribute'
我认为这类似于Pandas系列对象的工作方式:
>>> import pandas as pd
>>> import numpy as np
>>> s = pd.Series(np.array([1,2]),index=['a','b'])
>>> s.a = 3
>>> s
a 3
b 2
dtype: int32
答案 0 :(得分:0)
您正在考虑<html>
<body>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
</body>
</html>
假设您的班级名为namedtuple
Player
您也可以像其他任何课程一样启动它
from collections import namedtuple
Player = namedtuple('Player', ['attr1', 'attr2', 'attr3'])
Player(**your_dict) # Assuming your dict has {attr1: v, attr2: v..) etc
通过
访问其成员player = Player(attr1, attr2, attr3)
您不能设置另一个您没有在开始时设置的参数
player.attr1
答案 1 :(得分:0)
namedlist(https://pypi.org/project/namedlist/)似乎是一个不错的解决方案:
>>> from namedlist import namedlist
>>> MyClass = namedlist('MyClass', ['key1','key2'])
>>> d = {'key1': 'value1', 'key2': 'value2'}
>>> obj = MyClass(**d)
>>> obj.key2 = 'a new value'
>>> obj.key2
'a new value'
>>> obj.key3 = 'invalid'
AttributeError: 'MyClass' object has no attribute 'key3'