python公有属性和私有属性,python 类 私有属性,私有方法
本文主要介绍了python类的私有属性和公共属性的描述,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
00-1010 python私有属性和Python类公共属性的定义
目录
对于python来说,类属性只有两种可见性,public和private。
类的私有属性前面有“_ _”标识符,而公共属性不是必需的。
访问类外部的私有属性会引发异常。
基本类别:
def __init__(self,value):
自我。__value=值
b=基数(5)
打印(断言b. _ _值)
回溯(最近呼叫):
文件/Users/yangjia Jia/Desktop/project/python/algebra/test . py ,模块中的第19行
打印(b. _ _值)
attribute error :“Base”对象没有属性“__value”
财产被私有化,即使继承了其词类,也无法访问。
类别Parent:
def __init__(self,value):
自我。__value=值
类别子级(父级):
定义获取值(自身):
回归自我。_ _值
孩子=孩子(4)
print(child.get_value())
回溯(最近呼叫):
文件/Users/yangjia Jia/Desktop/project/python/algebra/test . py ,模块中的第24行
print(child.get_value())
文件/Users/yangjia Jia/Desktop/project/python/algebra/test . py ,第21行,在get_value中
回归自我。_ _值
AttributeError:“子”对象没有属性“_Child__value”
为什么会这样?因为python会对类的私有属性进行转换,以保证私有字段的私密性。当编译器看到Child.get_value方法要访问私有属性时,会先把__value转换成_Child_value再访问,但实际上私有属性是_Parent__value。一个类不能访问其父类的私有属性,仅仅因为被访问的名称不同。
查询对象的属性字典。
类别Parent:
def __init__(self,value):
自我。__value=值
类别子级(父级):
定义名称(自身):
姓名=杨
定义获取值(自身):
回归自我。_ _值
孩子=孩子(4)
打印(子。__字典_ _)
{_Parent__value: 4}
python开发的原则是少用私有属性。如果需要确保属性不重复,可以在它们前面加一个下划线。
类别Parent:
def __init__(self,value):
自我。_value=值
类别子级(父级):
定义获取值(自身):
回归自我。_值
孩子=孩子(4)
断言子级。_value==4
python类私有属性和公共属性
当变量或方法在Java中被private限制时,方法只在整个类内部可见,而在外部不可见且不可访问。
python中也有私有属性定义,由函数名前缀的两个下划线定义。
例如_ _参数
接下来,我们来看看狗的例子。
类别狗(对象):
__slots__=(__name , kind , level )
DEF _ _ init _ _ (self,name,kind,level) 3360 #构造函数,定义属性和初始方法
自我。__name=name
善良=善良
Self.level=级别#分配
print(f 这是一只{self.kind}狗,叫{self。级别为{self.level} )的__name}
定义一个类中的方法
打印(f{self。“__name}现在正在运行!”)
def roll_over(self):
打印(f{self。“__name}现在正在滚动!”)
定义变更_级别(自身):
Self.level=1#修改类中属性的值
打印{自我}的级别。__name}现在是{self.level} )
在另一个文件中调用
动物园的。狗进口狗#指南包
Dog=Dog(Halo , Husty ,3)#实例化
dog.run()
dog.roll_over()
Dog.change_level()#调用方法
当我们发现我们输入以下内容时,我们会报错并非法访问。
打印(狗。_ _名称)
在此示例中,__name是对名称的私有限制。
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。