Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1093693
  • 博文数量: 120
  • 博客积分: 887
  • 博客等级: 准尉
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-05 21:10
个人简介

RHCE,CCNA,熟悉shell脚本

文章分类

全部博文(120)

文章存档

2015年(16)

2014年(20)

2013年(48)

2012年(20)

2011年(16)

分类: Python/Ruby

2013-12-01 14:12:35

'''在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) |
给主人留下些什么吧!~~