关于python类中的魔法方法

__init__方法会在创建类的实例对象的时候调用
__dict__方法两种用法

  1.  类名.__dict__ 的结果是一个包含当前类的所有方法名字和对象的字典  
    
  2.  类的实例对象.__dict__    的结果是一个包含当前实例对象当前的所有属性名和属性值的一个字典
    
class AnotherFun:
    def __init__(self):
        self.name = "Liu"
        print(self.__dict__)
        self.age = 12
        print(self.__dict__)
        self.male = True
        print(self.__dict__)
another_fun = AnotherFun()

# {'name': 'Liu'}
# {'name': 'Liu', 'age': 12}
# {'name': 'Liu', 'age': 12, 'male': True}

__setattr__方法,setattr__方法和__dict 方法可以说是一对,一个是展示实例的所有属性值,一个是设置对象的属性值 ,当在对象内部设置或者生成新的属性和值得时候会调用__setattr__方法将这个属性和值插入到__dict__的字典里面,__setattr__方法内部的实现基本可以认为是给__dict__的字典插入新的键值的动作,可以对其进行重写但是要注意不要影响实例对象的属性赋值功能

class Fun():
    def __init__(self):
        self.name = "Liu"
        self.age = 12
        self.male = True

    def __setattr__(self, key, value):
        print("*" * 50)
        print("插入前打印current __dict__ : {}".format(self.__dict__))
        # 属性注册
        self.__dict__[key] = value
        print("插入后打印current __dict__ : {}".format(self.__dict__))

    def test(self):
        self.new_key = "new_value"

fun = Fun()
print("===============")
fun.test()


# **************************************************
# 插入前打印current __dict__ : {}
# 插入后打印current __dict__ : {'name': 'Liu'}
# **************************************************
# 插入前打印current __dict__ : {'name': 'Liu'}
# 插入后打印current __dict__ : {'name': 'Liu', 'age': 12}
# **************************************************
# 插入前打印current __dict__ : {'name': 'Liu', 'age': 12}
# 插入后打印current __dict__ : {'name': 'Liu', 'age': 12, 'male': True}
# ===============
# **************************************************
# 插入前打印current __dict__ : {'name': 'Liu', 'age': 12, 'male': True}
# 插入后打印current __dict__ : {'name': 'Liu', 'age': 12, 'male': True, 'new_key': 'new_value'}

你可能感兴趣的:(笔记,python,开发语言)