Home  >  Article  >  Backend Development  >  Python implements type checking of instance attributes

Python implements type checking of instance attributes

小云云
小云云Original
2018-03-29 14:13:001721browse

This article mainly introduces in detail how Python performs type checking on instance attributes. It has certain reference value. Interested friends can refer to it. I hope it can help you.

Case:

In a certain project, we implemented some classes and hoped to type-check their instance properties like static languages

p = Person()

p.name = 'xi_xi' # Must be str

p.age = 18 # Must be int

           p.height = 1.75 # Must be float

Requirements:

You can specify the type for the instance variable name

Giving an incorrect type throws an exception


#!/usr/bin/python3
 
 
class Attr(object):
 """
 对Person类中属性进行类型检查
 """
 # 传入字段名字 + 指定字段类型
 def __init__(self, name, style):
  self.name = name
  self.style = style
  
 # 取值
 def __get__(self, instance, owner):
  return instance.__dict__[self.name]
  
 # 设值
 def __set__(self, instance, value):
  # 判断参数类型是否满足条件
  if isinstance(value, self.style):
   instance.__dict__[self.name] = value
  else:
   raise TypeError('need type: %s' % self.style)
  
 # 删除值
 def __delete__(self, instance):
  del instance.__dict__[self.name]
 
 
class Person(object):
 name = Attr('name', str)
 age = Attr('age', int)
 height = Attr('height', float)
  
 
if __name__ == '__main__':
 p = Person()
  
 p.name = 'xi_xi'
 # p.name = 55
 p.age = 18
 p.height = 1.75
 print(p.name, p.age, p.height)
  
 del p.height

Related recommendations:

JavaScript type checking and internal properties [[Class]]

The above is the detailed content of Python implements type checking of instance attributes. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn