码迷,mamicode.com
首页 > 编程语言 > 详细

Python中私有方法和私有属性

时间:2018-03-18 23:20:59      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:Python   私有方法   私有属性   

1.私有方法和私有属性
私有方法只能在类内部被调用,不能被对象使用
私有属性只能在类内部使用,不能被对象使用

私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或修改,然后对象在调用这个公有方法使用。
###私有属性和私有方法########
#在属性名和方法名前面加上 __

class Person(object):
    def __init__(self):
        # 公有属性
        self.name = "李四"
        #私有属性
        self.__age = 18
    #定义公有方法
    def show_info(self):
        # 私有属性只能在类内部使用,可以通过内部公有方法修改,
        self.__age = 29
        print(self.name, self.__age)
#调用私有方法

#在类内部使用私有方法,可以通过内部公有方法调用
result = self.__show_address()
print( result)
#定义私有方法
def __show_address(self):
return "我的家在东北"

#定义对象,调用类

person = Person()
person.show_info()

#测试对象调用私有属性,结果报错,对象不能使用私有属性,私有属性只能在内部使用
#print(person.name, person.age)
#测试对象调用私有方法,结果报错,私有方法只能在类内部使用
#person.
show_address()
输出:

李四 29
我的家在东北

===================================================================
扩展:私有属性和私有方法,只是把名称进行了伪装,改成了其他名称,导致我们访问失败,
如果我们拿到了伪装后的名字,对象还是可以类外面调用私有方法和私有属性

Notice::python中的私有没有做到绝对私有(非常规方法)

#查看对象属性
dict (可以使用对象或者类,查看对象或者类属性)

通过print(person.dict)拿到对象person的属性名称

#查看对象属性和方法
dir (可以查看对象或者类属性和方法)

通过print(dir(person))查看到对象person的属性和方法名称

看到伪装后的方法和属性名称,对象就可以调用

2.子类继承父类,默认无法使用父类的私有方法和属性

====================
扩展:
但是,如果我们拿到父类私有属性和私有方法的名称,子类也可以调用

3.私有属性的修改

私有属性只能在类内部进行修改
通过定义公有方法修改,让后对象调用公有方法

=====================
扩展:
如果我们知道私有属性伪装后的名字,我们也可以通过伪装后的名字去修改私有属性,

我们在外面通过对象调用私有属性名称去修改的,不是真的修改,而是对对象添加了一个__开头的属性,并没有做到修改私有属性

总结:私有方法和私有属性只能在类内部使用,私有属性的修改也只能在类内部修改(非常规操作除外)

Python中私有方法和私有属性

标签:Python   私有方法   私有属性   

原文地址:http://blog.51cto.com/10412806/2088304

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!