使用__dict__存取任意数据

类的静态函数、类函数、普通函数、全局变量以及内置属性都是放在类的__dict__属性中,直接操作__dict__属性可以直接向类的实例中动态的添加成员。在发生继承时,子类有自己的__dict__,父类也有自己的__dict__,属于子类的全局变量和函数将放置在子类的__dict__中,父类的放置在父类的__dict__中,父类的__dict__不会影响子类的__dict__

__dict__是一个字典类型,可以直接使用字典的常规操作来处理。配合魔术方法__getattr____setattr__可以做到在类中存取任意数量的数据。

以下给出一个可自由保存数据的类的示例。

class Storage:
	def __init__(self, **kwargs):
		self.__dict__.update(kwargs)
	
	def __getattr__(self, name):
		if name in self.__dict__.keys():
			return self.__dict__.get(name)
		else:
			return None
	
	def __setattr__(self, key, value):
		self.__dict__.update({key: value})


sample = Storage({"id": 0, "name": "sample"})
sample.create_time = "1970-1-1"
sample.create_time = "1970-1-2"
print(sample)