当前位置: 首页 > 后端技术 > Python

python-object-oriented-13-private属性

时间:2023-03-26 01:26:24 Python

python与强类型面向对象语言不同,对类的成员没有严格的访问控制限制。关于私有属性和私有方法,有以下几个要点:通常我们认为两个下划线开头的方法的属性是私有的(private),其他的是公有的(public),没有中间状态protect。类内部可以访问私有属性(方法),类外可以访问属性,但是不能直接访问私有属性(方法)。私有属性(方法)可以通过_类名__私有属性名(方法名)在类外访问,不推荐使用注意:方法本质上也是属性!只是可以通过()来执行(本质是类型不同)。因此,这里所说的私有属性和公有属性同样适用于私有方法和公有方法的使用。在以下测试中,包括私有和公共方法的示例。直接使用私有属性的代码示例:classEmployee:def__init__(self,name,age):self.name=nameself.__age=age#定义私有属性e=Employee("NieFajun",100)print(e.name)print(e.age)runningresult:NieFajunTraceback(mostrecentcalllast):文件"test.py",line10,inprint(e.age)AttributeError:'Employee'objecthasnoattribute'age'程序说明:在定义类Employee时,定义了公共属性名和私有属性age。首先,实例化对象e。因为name属性是public的,所以可以直接打印出来。但是,age属性是私有属性,不能直接访问。提示错误信息:AttributeError:'Employee'objecthasnoattribute'age'。通过_classname__私有属性名(方法名)访问示例代码:classEmployee:def__init__(self,name,age):self.name=nameself.__age=agee=Employee("聂法君",100)print(dir(e))print(e._Employee__age)print(e.name)运行结果:['_Employee__age','__class__','__delattr__','__dict__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__gt__','__hash__','__init__','__init_subclass__','__le__','__lt__','__module__','__ne__','__new__','__reduce__','__reduce_ex__','__repr__','__setattr__','__sizeof__','__str__','__subclasshook__','__weakref__','name']100聂发君程序说明:通过dir()方法,我们看到第一个属性是_Employee__age,它是由私有属性age转换而来的可访问属性,然后最后一个属性是name,我们自定义的实例属性。后面我们分别打印_Employee__age和name属性的时候,就会打印出相应的结果。备注:更多精彩博客请访问:聂法军技术博客对应视频教程请访问:python400完整markdown笔记请访问:python400_learn_github