描述符应用

'''描述符应用'''
# class Typed:
#  def __set__(self, instance, value):
#     print('set方法执行')
#     print('instance参数%s' % instance)
#     print('value参数%s' % value)
#
#  def __get__(self, instance, owner):
#     print('get方法执行')
#     print('instance参数%s' % instance)
#     print('owner参数%s' % owner)
#
#  def __delete__(self, instance):
#     print('delete方法执行')
#     print('instance参数%s' % instance)
#
# class People:
#  name = Typed()
#  def __init__(self, name, age, salary):
#     self.name = name
#     self.age = age
#     self.salary = salary
#
# p1 = People('alex', 18, 10000.55)
# p1.name
# p1.name = 'lhf'
# print(p1.__dict__)


# 类实例化所传入参数加上字符类型限制
class Typed_1:
   def __init__(self, key, expected_type): # ①这里先定义一个__init__,以便作为instance实例属性字典的key值
      self.key = key
      self.expected_type = expected_type

   def __set__(self, instance, value):
      if type(value) == self.expected_type:
         instance.__dict__[self.key] = value # ③这里通过self.key作为instance实例属性字典key值
      else:
         raise TypeError('输入类型错误')

   def __get__(self, instance, owner):
      return instance.__dict__[self.key]

   def __delete__(self, instance):
      instance.__dict__.pop(self.key)

class People_1:
   name = Typed_1('name', str) # ②这里需要传入两个值给__init__
   age = Typed_1('age', int)
   salary = Typed_1('salary', float)
   def __init__(self, name, age, salary):
      self.name = name
      self.age = age
      self.salary = salary

p2 = People_1('小明', 18, 300.33)
# p3 = People_1(999, 18, 300.33)
# p4 = People_1('小红', '18', 300.33)
# p5 = People_1('小亮', 18, 300)
while True: print('studying...')
原文地址:https://www.cnblogs.com/xuewei95/p/14756749.html