• python面向对象


    l  面向对象

    Python一切皆对象:https://www.cnblogs.com/magicking/p/8971740.html

    类是抽象的模板,实例是根据类创建出来的一个个具体的”对象”, 定义了一个类,电脑并没有创建什么存储空间。只有当我们完成类的实例化(Instance)时,电脑才会创建一个具体的对象(Object),并为之分配存储空间。所以对象(Object)是类(Class)的一个实例。

    https://www.yiibai.com/object_oriented_python/object_oriented_python_introduction.html

    https://blog.csdn.net/42134789/article/details/80194788

    http://c.biancheng.net/view/2263.html

    访问限制

    java有privatepublicprotected的访问限制,python根据变量和方法名来访问限制

    l  私有变量/方法

    名称以双下划线开头(__age),即私有的,只能在类内部访问,在外部不能访问是因为python解释器对外把__age改变成”_类名__age”;在类外使用使用people().__age=12,这不是对原来私有成员访问,而是添加一个新的实例变量__age

    总结:

    • _name、_name_、_name__:建议性的私有成员,不要在外部访问;
    • __name、 __name_ :强制的私有成员,但是你依然可以蛮横地在外部危险访问;
    • __name__:特殊成员,与私有性质无关,例如__doc__;
    • name_、name__:没有任何特殊性,普通的标识符,但最好不要这么起名!

                                                                                                                                                               

    类定义

    class 类名(继承类):

             。。。。

    .1     类对象创建和使用

    #创建类对象

    a = 类名(参数)   --调用类的__init__构造方法,a指向类对象,a为类实例

    .2     方法

    关键字self是个非常重要的参数,代表创建的对象本身

    .2.1           初始化方法

    def __init__(self,….)

             self.name=xxx

    .2.1           释放方法

    def __del__(self):  # 对象资源被释放时触发,在对象即将被删除时的最后操作

    .3     类变量与实例变量

     

    .3.1           类变量

    • 说明:类变量在整个实例化的对象中是公用的,由类直接访问,在内存中只保存一份,在类定义中cls代表类
    • 定义方式:定义在类中且在函数体之外,直接“变量名=xxx”来定义
    • 访问方式:在类定义中使用类名.变量名或者self.__class__.变量名或cls.变量名,在类外使用类名.变量名。self.__class__自动返回每个对象的类名
    • 说明:由对象来访问,在内存中每个对象都要保存一份,在类定义中self代表实例对象
    • 定义方式:定义在方法中的变量,属于某个具体的对象,使用self.变量名定义
    • 访问方式:在类定义中使用self.变量名,在类外使用对象名.变量名访问
    • 特殊说明:python是动态语言,可以根据类实例来任意绑定属性;通过实例变量或self变量

    .3.2           实例变量

    .4     类方法与实例方法

    与某个对象进行绑定的函数称为方法;类外定义的函数没有同对象进行绑定,称为函数。

    .4.1           类方法

    • 说明:类方法只属于类,方法第一个参数使用cls代表类方法
    • 定义方式:def 方法名(cls,);方法定义时使用cls代表类方法,另我们习惯方法上加@classmethod的修饰符

    @classmethod

    def xxx(cls,)

                       cls.类变量

    • 访问方式

    __init__.py

    test  --test目录层次

             __init__.py

             test_a.py

             test_b.py

    包含__init__.py文件的文件夹为模块,每个模块包中都有一个__init__.py文件,当import包时,会执行__init__.py文件,这样可以在__init__.py文件中批量导入我们所需要的模块,而不是一个个的导入

    __init__.py文件的内容可以如下:

     

    __init__.py文件的作用

    l  __init__.py文件中导入需要使用的模块

    import test

    test.os 

    把需要导入大量模块,存放在__init__.py文件中,这样直接导入该包,就可以使用了,减少代码量

    l  __init__.py文件里存放模块的全局变量和公共方法

    如定义变量a,或函数,或类;使用test.a调用

    l  __all__变量的作用

    __init__.py文件中可以使用__all__变量来直接限制from test import *时导入的模块,如上图,会导入test_a,test_b,os模块,其中a导入不了,就无法使用a

    使用方式

    l  使用import test

    直接导入test包,执行__init__.py文件

    test.a  --调用a变量

    test.os --调用os模块

    test.test_a  --报错,无法调用,因为只导入了test包,没有导入该包下的模块

    l  使用 from test import *

    #无__all__变量时

    执行__init__.py文件,导入该包下的所有模块和该文件中变量和方法,可以调用a,os,test_a,test_b

    #有__all__变量时

    执行__init__.py文件,导入该变量指定的模块,可以调用os,test_a,test_b

    l  使用 from test import a

    执行__init__.py文件,只会导入a

    知道、想到、做到、得到
  • 相关阅读:
    mysql触发器实时检测一条语句进行备份删除
    ORA-12560: TNS: 协议适配器错误 windows
    DG:windows密码文件
    vim already exists!
    k8s 集群升级
    部署 k8s 备份工具 velero
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    lens 添加 k8s 集群
    redis系列
    s3c2440裸机-I2c编程-3.i2c中断服务程序
  • 原文地址:https://www.cnblogs.com/Durant0420/p/14440960.html
Copyright © 2020-2023  润新知