class Foo():
    def __str__(self):
        return "好好学习"
    def __getattr__(self, item):
        return "0000"
    def __setattr__(self, key, value):
        self.__dict__[key]=value
    def __getitem__(self, item):
        return 11111
    def __add__(self, other):
        return other + 1
obj = Foo()
print(obj)  #调用__Str__          #打印结果:好好学习
print(obj.x) #调用 __getattr__    #打印结果:0000
#当使用赋值语句对属性进行设置时,python会自动调用__setattr__()方法,
# 如果该属性不存在,则会调用__setattr__()对实例属性赋值,被赋值的属性和值会存入实例属性字典__dict__中
obj.x0=222 #设置属性
print(obj.x0) #打印结果:222
print(obj['x1']) #调用 __getitem__  #打印结果:11111
print(obj+8)    #调用 __add__  #打印结果:9