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有private\public\protected的访问限制,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
标签:__,__.,变量,python,py,面向对象,init,test 来源: https://www.cnblogs.com/Durant0420/p/14440960.html