python 24 描述符控制参数类型以及上下文管理协议

# 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__)
AI实战-泰坦尼克号生还可能性数据集分析预测实例(含19个源代码+59.76 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:19个代码,共121.84 KB;数据大小:1个文件共59.76 KB。 使用到的模块: pandas numpy seaborn matplotlib.pyplot warnings sklearn.model_selection.train_test_split sklearn.ensemble.RandomForestClassifier sklearn.metrics.accuracy_score sklearn.metrics.confusion_matrix os scipy.stats sklearn.compose.ColumnTransformer sklearn.impute.SimpleImputer sklearn.preprocessing.OneHotEncoder sklearn.impute.KNNImputer sklearn.preprocessing.StandardScaler sklearn.ensemble.RandomForestRegressor sklearn.ensemble.GradientBoostingRegressor sklearn.metrics.classification_report sklearn.metrics.roc_auc_score sklearn.model_selection.cross_val_score sklearn.pipeline.Pipeline sklearn.model_selection.RandomizedSearchCV sklearn.ensemble.GradientBoostingClassifier sklearn.linear_model.LogisticRegression sklearn.naive_bayes.GaussianNB sklearn.metrics.roc_curve xgboost.XGBClassifier sklearn.ensemble.AdaBoostClassifier sklearn.tree.DecisionTreeClassifier sklearn.preprocessing.LabelEncoder imblearn.over_sampling.SMOTE sklearn.svm.SVC sklearn.model_selection.GridSearchCV math sklearn.neighbors.KNeighborsClassifier sklearn.metrics.precision_score sklearn.metrics.recall_score sklearn.metrics.f1_score sklearn.metrics.ConfusionMatrixDisplay torch dataclasses.dataclass typing.List typing.Tuple typing.FrozenSet typing.Set typing.Dict fcapy.lattice.ConceptLattice fcapy.lattice.formal_concept.FormalConcept fcapy.poset.POSet fcapy.visualizer.line_layouts.calc_levels sparselinear.SparseLinear sklearn.neural_network.MLPClassifier fcapy.context.FormalContext fcapy.visualizer.LineVizNx networkx sklearn.preprocessing.MinMaxScaler sklearn.ensemble.BaggingClassifier torch.nn torch.optim sklearn.datasets.load_iris
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值