'''在python中,属性分为公有属性和私有属性。
公有属性可以在类的外部调用,私有属性不能在类的外部调用
公有属性可以是任意变量,私有属性是以双下划线(__)开头的变量
'''
kayson@kayson-virtual-machine:~$ cat fangfa.py
#! /usr/bin/python
#-*- coding:utf-8 -*- # 这个一定要写在第二行,否则会报错无法运行程序
class people(): # 定义一个people类
name='' #公有属性name 空值
__age=0 #公有属性__age 等于 0
def __init__(self): #定义初始化构造方法__init__,其实就是定义一个初始化函数
self.name='xxxzhang三' #给公有属性赋值
self.__age=23 #给私有属性赋值
# def showinfo(self): #定义一个showinfo函数来调用私有属性
# return self.__age #将私有属性返回给self.__age
if __name__=='__main__': #在类的外部,main函数中
p1=people() #调用people类,实例化people类的对象
print p1.name #打印出公有属性
print p1.__age #打印私有属性
# print p1.showinfo() #调用showinfo函数,来从外部打印私有函数
kayson@kayson-virtual-machine:~$ python fangfa.py
xxxzhang三
Traceback (most recent call last):
File "fangfa.py", line 14, in
print p1.__age
AttributeError: people instance has no attribute '__age' #不可以在外部访问私有属性
'''既然不能从外部来访问私有属性,但我们又需要访问时。
我们就间接的使用showinfo()这个方法来调用'''
python面向对象的私有机制
'''python中以双下划线开头的属性和方法,在被实例化后会自动在其名字前面加“_classname”
因为名字被改变了。所以自然无法通过双下划线开头的名字来访问。从而达到不可进入的目的。
可以通过实例名.__dict__来查看对象的属性集合'''
# ------------- 用代码辅以解释-----------------------------
kayson@kayson-virtual-machine:~$ cat fangfa.py
#! /usr/bin/python
#-*- coding:utf-8 _*_
class people():
name=''
__age=0
def __init__(self):
self.name='xxxzhang三'
self.__age=23
def showinf(self): #定义此函数方法即可在外部调用私有属性
return self.__age #返回私有属性的值
if __name__=='__main__':
p1=people()
print p1.name
print p1.showinfo #调用showinfo()函数来打印私有属性
print p1.__dict__ # __dict__可以看到python面向对象的私有机制
kayson@kayson-virtual-machine:~$ python fangfa.py
xxxzhang三
23 # 由于使用了showinfo()函数,所以返回值能在外部打印私有属性
{'_people__age': 23, 'name': 'xxxzhang\xe4\xb8\x89'}
#python面向对象的私有机制,由于people的名字改变,自动变成了_people,所以无法通过原有的私有属性来访问其中的值
阅读(3892) | 评论(0) | 转发(0) |