python-演练-通过描述符来控制另一个类的实例化参数

普通的类,实例化时无限定

# 定义一个人的类,控制一下对实例属性的类型限定
# 实例化对象的时候,对参数进行一个数据类型的限定

class People:
    def __init__(self,name):
        self.name = name


sq = People("sq")
error = People(123)

print(sq.__dict__)
print(error.__dict__)

C:\Users\python_hui\Anaconda3\python.exe G:/test/a/描述符实例/1.py
{‘name’: ‘sq’}
{‘name’: 123}

Process finished with exit code 0

需求,实例化时限定数据型

》明确在set中各个参数是什么

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结论

》描述符中的set 方法中 instance 就是实例对象本身, value 就是要给被代理的属性所赋的值

会出错的情况

在这里插入图片描述

完结-完整的代码

class Manage:
    """数据描述符"""

    # name = Manage("name")
    def __init__(self, attrName):
        self.attrName = attrName

    def __set__(self, instance, value):
        if type(value) is str:
            print("字符串类型,正确", value, type(value))
            # setattr(instance, self.attrName, value)
            instance.__dict__[self.attrName] = value
        else:
            print("非法数据类型", value, type(value))
            raise TypeError("{}是非法的数据类型".format(value))
            # raise KeyError("{}是非法的数据类型".format(value))

    def __get__(self, instance, owner):
        pass

class People:
    name = Manage("name")
    def __init__(self,name):
        # print('sq--self', self)
        self.name = name

# sq = People("孙权")
n = People(111)
# print(sq.__dict__)
print(n.__dict__)
# print('sq的地址', sq)

版权声明:本文为ifubing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。