Python对象的公开属性有两种来源:一是从生产对象的类中引用而来,二是对象直接添加。下面通过程序说明这两种来源的属性的差别。
类公开属性程序代码:
,
结果打印:
;
对象属性程序代码:
,
结果打印:
。
总结:来源于类的公开属性的对象属性只是引用,如果对象添加了同名的属性,同名属性只是掩盖了类的公开属性,当添加的属性被删除后,原来类属性又会展现出来;对象添加的属性可以编辑和删除。由于这个原因,如果使用类公开属性,就谨慎使用属性的删除(del)功能。
类私密属性程序代码:
,
结果打印:
。
总结:在类外添加一个与类私密属性名称相同的属性,该属性并不能掩盖原来的属性。类外引用的是对象的属性;类内引用的是类的属性。因此在类外添加对象属性时,一般不能用双下划线(__)开始的名称。
既然类也是对象,那么用类去添加、编辑和删除类的属性情况会怎样呢?
程序代码:
,
结果打印:
。
程序代码:
,
结果打印:
。
修改程序代码:
,
结果打印:
。
类内操作代码:
,
结果打印:
;
类内操作代码:
,
结果打印:
。
总结:用类名称可以删除类的属性,删除类属性后,这个类的对象如果没有对属性赋值过,那这个对象的属性也没有了,这个说明创建对象时,对象的属性只是类属性的引用。类外添加的属性都是公开的,尽管以双下划线(__)开头;类内添加的属性,双下划线(__)开头的是私密的,其它是公开的。
类属性是复杂数据(例如:列表)时,程序代码:
,
结果打印:
。
总结:类属性是列表等结构数据时,类的多个对象,如果不对这个属性进行赋值,就全部共享这个结构数据。
属性值包罗万象,可以是数、字符串、列表、元组、字典、对象等一般数据,也可以是类、函数、类内方法等特殊的类型。
属性值是类:
,
结果打印:
。
属性值是函数:
,
结果打印:
。
属性值是类内公开方法:
,
结果打印:
。
属性值是类内私密方法:
,
结果打印:
。
类的私密属性在类外不可访问也不可修改,那如何方法和修改呢?
程序代码:
,
结果打印:
。
总结:私密属性的访问、修改等操作都是使用公开方法。
练习:把本课的测试程序输入电脑自己测试一次。