python属性详解

'''在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,所以无法通过原有的私有属性来访问其中的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值