# python 上下文管理协议 描述符
# /usr/sbin/py/python
# -*-coding:utf8-*-
class Open:
def __init__(self,name):
self.name = name
def __enter__(self):
print("execute enter")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("execute exit")
with Open("a.txt") as f: # 指 with as 这种写法
print("---------")
print(f.name)
pass
# 自动触发类中的 enter方法,方法结束后会触发exit方法
# with 代码块如果出现异常 会直接执行exit方法
# 描述符
# 数据描述符:至少实现了 get,set方法
# 非数据描述符:没有set方法
# 优先级 类属性》数据描述符》实例属性》非数据描述符》找不到的属性除非__getattr__()方法
# 通过属性描述符来限制变量类型
# 声明一个数据描述符
class StrType:
def __init__(self,key,paramType):
self.key = key
self.paramType = paramType
def __get__(self, instance, owner):
print("get",instance,owner)
return instance.__dict__[self.key]
def __set__(self, instance, value):
if isinstance(value,self.paramType):
instance.__dict__[self.key] = value
else:
# print("传入数据类型错误不是字符串",value)
raise TypeError("传入数据类型错误不是字符串",value)
# return
def __delete__(self, instance):
instance.__dict__.pop(self.key)
class Person:
name = StrType("name",str)
age = StrType("age",int)
salary = StrType("salary",float)
def __init__(self,name,age,salary):
self.name = name
self.age =age
self.salary =salary
p1 = Person("jake",10,33.5)
print("=================>",p1.__dict__)
print(p1.name)
# p2 = Person(1,2,3)
# print(p2.__dict__)
python 24 描述符控制参数类型以及上下文管理协议
最新推荐文章于 2024-01-04 00:10:53 发布
2375

被折叠的 条评论
为什么被折叠?



