zoukankan      html  css  js  c++  java
  • Python面向对象之进阶

    一、property 内置函数

    装饰器的使用:所有的装饰器函数、方法、类的上一行直接@装饰器的名字

    装饰器的分类:

    ① 装饰函数

    ② 装饰方法

    ③ 装饰类

     

    property 是一个装饰器函数

    @property 是装饰方法的,将一个方法伪装成一个属性,相当于调用方法是不需要加括号

    class A:
        def __init__(self,name):
            self.__name = name
    
        @property
        def name(self):
            return self.__name
    
    a = A('小明')
    print(a.name)
    
    '''
    小明
    '''

     

    方法不能被删除,属性可以删除

    property的作用:

      一个方法被伪装成属性之后,应该可以执行一个属性的增删改查操作,所有的操作方法必须更property修饰的同名

      增加和修改属性:使用setter装饰的方法,这个方法需要一个必传入的参数,用于私有变量的赋值

      删除属性:使用delete装饰的方法,这个方法并不是在执行是删除属性,而是del 属性的时候执行方法里的代码

    class School:
        def __init__(self,name):
            self.__name = name          # 定义私有属性
    
        @property                       # 把方法装饰为属性
        def name(self):
            return self.__name
    
        @name.setter                    # 设置属性修改的方法,修改属性的值
        def name(self,new_name):
            self.__name = new_name
    
        @name.deleter                   # 设置删除属性执行的方法
        def name(self):
            print('不能删除啊!')
    
    harvard = School('哈佛')
    print(harvard.name)                 # 获取属性的值
    print(harvard.__dict__)             # 获取对象的所有方法和属性
    harvard.name = '北大'               # 修改属性的值
    print(harvard.__dict__)
    del harvard.name                    # 执行被deleter的方法
    print(harvard.__dict__)
    
    '''
    哈佛
    {'_School__name': '哈佛'}
    {'_School__name': '北大'}
    不能删除啊!
    {'_School__name': '北大'}
    '''

     

    二、@classmethod

    classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等

    类方法的特点:

      使用类中的资源,而且这个资源可以直接用类名引用的使用,那这个方法就应该被改为一个类方法。

      类方法使用@classmethod 来修饰,类方法不涉及类对象的资源。

    class England:
        __city = 'London'
        def __init__(self):
            pass
    
        @classmethod                        # 使用类修改本类的静态属性
        def change_capital(cls,city):       # cls是类,类方法
            England.__city = city
    
    print(England._England__city)
    England.change_capital('Liverpool')
    print(England._England__city)
    
    '''
    London
    Liverpool
    '''

    三、@staticmethod

    staticmethod 返回函数的静态方法。

    当一个在类中的普通方法不需要传入类和类对象,可以使用staticmethod修饰

    class A:
        @staticmethod
        def func():
            print('静态方法')
    
    A.func()

    四、类的补充

    类包含的内容:

    ① 静态属性  

    调用者:类

    特点:所有的对象都统一拥有的属性

    ② 类方法

    调用者:类

    特点:方法涉及到操作静态属性、类方法、静态方法

    形参:cls 表示类

    ③ 静态方法

    调用者:类

    特点:普通方法,不使用类中的命名空间也不适用对象的命名空间,相当于一个普通的函数,没有默认参数

    ④ 方法

    调用者:对象

    形参:self 表示对象

    ⑤ property方法

    调用者:对象

    形参:self 表示对象

    五、isinstance

    检测对象与类的关系

    isinstance() 与 tpye() 的区别:

    type不接收继承关系,isinstance接收继承关系

    type只能判断这个对象是哪个类创建出来的,isinstance能判断对象与类之间的继承关系

    type相对精确,isinstance覆盖面广

    class A:pass
    class B(A):pass
    
    a = A()
    b = B()
    
    print(type(b) is B)
    print(type(b) is A)
    print('---------------')
    print(isinstance(b,B))
    print(isinstance(b,A))
    
    '''
    True
    False
    ---------------
    True
    True
    '''

    六、issubclass

    检测类与类之间的关系,判断cls是否为cls的父类

    使用:issubclass(子类,父类 )

    class A:pass
    class B(A):pass
    
    print(issubclass(A,B))          
    print(issubclass(B,A))              # 子类放在第一个参数
    
    '''
    False
    True
    '''
  • 相关阅读:
    安卓模拟器genimotion安装过程
    python3安装过程
    python基础数据类型数字和字符串
    genimotion模拟器和appium环境配置
    ArcEngine中的ICommand和ITool
    BM.AE介绍
    地图数据和版式数据联动
    BM.AE中的命令工具体系
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571获取任意路径dwg文件内所有块在控件中显示并能选择插入当前模型空间
    2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571用acedGrRead()函数实现一拖多
  • 原文地址:https://www.cnblogs.com/st-st/p/9561795.html
Copyright © 2011-2022 走看看