zoukankan      html  css  js  c++  java
  • 03.6 私有属性,上下文管理器

    代码

    # ============================
    # 数据封装
    class User:
        def __init__(self, number):
            """__属性名,私有属性"""
            self.__number = number
            print("User init")
    
        def get_number(self):
            return self.__number
    
    
    # super调用
    class Man(User):
        def __init__(self):
            print("Man __init__")
    
            # super调用父类的构造方法, 执行顺序 遵循mro
            super().__init__(2)
    
    
    # mixin - drf 模式特点
    """
    1. 功能单一
    2. 不和基类关联,可以和任意基类组合,基类可以不和mixin关联就能初始化成功
    3. 在mixin中不要使用super这种方法
    """
    
    # with 语句 上下文管理器, 类中定义__enter__,__exit__ 即可使用with是实现上下文管理
    class Sample:
        def __enter__(self):
            """获取资源"""
            return self
        def __exit__(self, exc_type, exc_val, exc_tb):
            """释放资源"""
            print("exit")
        def do_something(self):
            print("doing something")
    
    
    with Sample() as sample:
        sample.do_something()
    
    # contextlib 简化上下文管理器
    import contextlib
    @contextlib.contextmanager
    def file_open(file_name):
        # 相当于 __enter__
        print("file open")
        yield print(file_name)
        # 相当于 __exit__
        print("file end")
    
    with file_open("123") as f:
        f
    
    if __name__ == '__main__':
        user = User(1)
        # print(user.__number)    # AttributeError: 'User' object has no attribute '__number'
    
        # 对象自省机制
        # 查看类/实例中的属性 __dict__. -返回字典
        print(user.__dict__)
        print(User.__dict__)
        # dir查看 所有属性(不包含值) - 返回列表
        print(dir(user))
    
        #
        print(Man.__mro__)  # (<class '__main__.Man'>, <class '__main__.User'>, <class 'object'>)
        man = Man()
    
    
  • 相关阅读:
    【可视化】指标块分析
    【可视化】可视化概况(一)
    webpack 打包编译优化之路
    Akka源码分析-Akka-Streams-概念入门
    Akka源码分析-Cluster-DistributedData
    Akka源码分析-Cluster-Sharding
    Akka源码分析-Cluster-Metrics
    Akka源码分析-Cluster-Distributed Publish Subscribe in Cluster
    Akka源码分析-Cluster-ClusterClient
    Akka源码分析-Cluster-Singleton
  • 原文地址:https://www.cnblogs.com/zy7y/p/14193607.html
Copyright © 2011-2022 走看看