Python拾遗之类属性和实例属性(二)
2017-05-06 22:48
381 查看
关于类属性和实例属性(二)
关于类的属性访问和调用规则:类的属性:,这里所指的属性包括方法和数据,从访问权限上分,分为公有,私有两种
先说说私有属性,一种是单下划线开头的,模块级别的私有,在不同包之间以from module import 形式导入的模块,该模块里的单下划线私有属性都不会在导入的模块被成功访问到,而导入的是同一个包下面的模块,恰恰相反,只有from module import ,才在导入的模块里访问到被导入模块里的单下划线开头的私有属性。其余方式的外部访问,皆可以进行。而对于双下滑开头的数据属性,以类名称访问或者实例名称访问属性,都不会在外部被访问到,但是你可以通过特殊方法(AccessName._Classname__privatevalue,就是所谓的混淆规则,目的是避免名称空间混乱)可以访问到,如果是双下划线开头的方法属性,如果是实例方法属性,除了用特殊方法外调用者还必须是实例本身,不能是类名称,这调用限制就是所谓的调用绑定方法。
如果是在类方法或者是静态方法前面加双下划线的私有属性,那么调用者只需遵守上述的特殊方法即可,如果没有特殊方法,双下划线开头的方法属性只能在类内部访问调用,并且面对实例方法的依旧是调用绑定方法的准则,并且只有实例方法才能调用实例属性(实例数据和实例方法)。
再谈谈公有属性:静态方法和类方法,还有个静态属性(静态数据),这些都可以用类的名称在全局的名字空间(名称空间)进行访问,涉及到私有权限,还是遵循上述讲到的规则,涉及到实例属性(方法属性和数据属性),依旧遵照调用绑定方法的准则,例如静态方法不可以直接调用实例方法,除非在调用前实例化再以实例名称调用实例方法。并且静态方法和类方法都可以调用,静态属性并且修改,而如果实例试图修改静态数据,将会被在python解释器在底层给屏蔽(另外创建一个同名实例属性变量),不管怎么样,静态方法中的静态属性的定义和调用尽量是以类作为调用者(ClassName.StaticValue),在类方法中的静态属性的定义和调用也尽量是以类作为调用者(cls.StaticValue)。
搁笔至此,总而言之,言而总之,对于Python的这些规则,看似毫无逻辑,实则还是还是有主线和规则的,不管是实例属性还是类属性的使用,都是在调用绑定方法,调用非绑定方法,以及Python解释器的屏蔽规则以及私有属性访问规则之下。
相关文章推荐
- Python拾遗之类属性和实例属性(一)
- python中类变量和实例变量__之类对象属性(类变量和函数)
- python之类属性和实例对象属性
- python实例26[查询修改文件的属性]
- Python的类实例属性访问规则
- python的类属性和实例属性
- python 基础学习第二弹 类属性和实例属性
- python中类属性和类实例的属性的区别
- Python——类属性/实例属性
- python的类属性和实例属性
- python中类属性和类实例的属性的区别
- python 的 类属性 与 实例属性
- python中若类属性与实例属性同名
- python 类,实例,模块的属性
- Python中的类属性和实例属性以及静态方法和类方法
- python下的一些特殊属性(几个实例说明)
- python类属性和实例属性
- python实例26[查询修改文件的属性]
- python下的一些特殊属性(几个实例说明)
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法