Python语法中容易混淆的地方-类属性/实例属性/公有变量/私有化变量
2017-09-09 16:55
453 查看
容易混淆的地方
xx: 公有变量_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
_xx_:双前后下划线,用户名字空间的魔法对象或属性。例如:_init_ , __ 不要自己发明这样的名字
xx_:单后置下划线,用于避免与Python关键词的冲突
通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。
容易混淆的地方
公有变量
私有变量
私有变量_x
_x总结
私有变量__x
魔法对象或属性
不要去尝试的方式
公有变量
#coding=utf-8 class Person(object): address = '北京' #类属性 def __init__(self, new_name): self.name = new_name #实例属性 p = Person('Tom') print(Person.address) #打印类属性 print(p.name) #打印实例属性
私有变量
私有变量_x
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问在
Person.py中定义
_age = 18,然后终端中输入
iPython3 4000打开命令交互模式,调用
Person.py中的_age会出现崩溃.
但是在命令交互模式通过
import Person调用就不会出现崩溃
因为通过
import Person是把
Person导入,在调用时是通过
Person来调用的,不是外部调用
_x总结
父类中属性名为__名字的,子类不继承,子类不能访问如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
_名的变量、函数、类在使用from xxx import *时都不会被导入
私有变量__x
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)class Person(object): def __init__(self, new_name): self.__name = new_name #set方法设置__name def set_name(self, new_name): self.__name = new_name #get方法获取__name def get_name(self): return self.__name p = Person() print(p.get_name()) #通过get_name方法返回__name,打印实例属性__name #print(p.__name) #直接调用__name会崩溃
也可以通过
property来实现,不做解释
Python没有真正的私有变量。内部实现上,是将私有变量进行了转化,规则是:_<类名><私有变量>
可以看到
_Person__age就是Python自动转化的
魔法对象或属性
_xx_:双前后下划线,用户名字空间的魔法对象或属性。例如:_init_ , __ 不要自己发明这样的名字他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。
不要去尝试的方式
xx_:单后置下划线,用于避免与Python关键词的冲突相关文章推荐
- Python容易混淆的地方
- 属性,点语法,实例变量
- python 类属性 、实例属性,可变数据结构作为类属性需要注意的地方
- 属性,点语法,实例变量(转)
- Objective - C setter,getter与实例变量的关系, 属性, 点语法
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量及__dict__属性
- python的类变量与实例变量以及__dict__属性
- python的类变量与实例变量以及__dict__属性
- Python容易混淆的地方
- python中类变量和实例变量__之类对象属性(类变量和函数)
- [python]“静态”变量:谈类属性和实例属性
- Python容易混淆的地方
- Python容易混淆的地方
- python的类变量与实例变量以及__dict__属性
- python易混淆点三:类 、函数、实例、属性 举例说明
- UITextField、UILabel和 UITextView四个容易混淆的属性
- python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的
- N3_容易混淆的语法