欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

描述符应用 -- 让python变成一个强类型的语言

发布时间:2025/3/21 python 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 描述符应用 -- 让python变成一个强类型的语言 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

众所周知,python是一门弱类型的语言,变量可以随意赋值成任意类型,但是通过描述符,我们可以把数据变成强类型的。

我们为数据设置数据描述符,因为数据描述的优先级大于实例属性,所以在给数据赋值的时候会优先出发数据描述符。

 

普通版

class Typed:def __init__(self, name, expected_type):self.name = nameself.expected_type = expected_typedef __get__(self, instance, owner):if instance is None:return self # 如果实例化用People.name调用的话,就返回Typed的实例namereturn instance.__dict__[self.name]def __set__(self, instance, value):if not isinstance(value, self.expected_type):raise TypeError('Type error')instance.__dict__[self.name] = valuedef __delete__(self, instance):instance.__dict__.pop(self.name)class People:name = Typed('name', str)age = Typed('age', int)salary = Typed('salary', float)def __init__(self, name, age, salary):self.name = nameself.age = ageself.salary = salary# p1 = People(123, 18, 3333.3) # TypeError: Type error # p1=People('egon','18',3333.3) # TypeError: Type error # p1=People('egon',18,3333) # TypeError: Type error p1 = People('egon', 18, 3333.33) # 正确

 

用类的装饰器实现

先回顾一下setattr的语法

语法

setattr() 语法:

setattr(object, name, value)

参数

  • object -- 对象。
  • name -- 字符串,对象属性。
  • value -- 属性值。
class Typed:def __init__(self, name, expected_type):self.name = nameself.expected_type = expected_typedef __get__(self, instance, owner):if instance is None:return selfreturn instance.__dict__[self.name]def __set__(self, instance, value):if not isinstance(value, self.expected_type):raise TypeError('type error')instance.__dict__[self.name] = valuedef __delete__(self, instance):self.__dict__.pop(self.name)def typeassert(**kwargs):def decorator(cls):for name, expected_type in kwargs.items():setattr(cls, name, Typed(name, expected_type))return clsreturn decorator@typeassert(name=str, age=int, salary=float) class People:def __init__(self, name, age, salary):self.name = nameself.age = ageself.salary = salaryp1 = People('edward', 18, 30000.00)

 

转载于:https://www.cnblogs.com/lshedward/p/10415731.html

总结

以上是生活随笔为你收集整理的描述符应用 -- 让python变成一个强类型的语言的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。