这个属性只能用self.来访问,python的私有化是为了

aa = A()
print aa.__fun2()




Traceback (most recent call last):
  File "E:4.scriptworktest.py", line 21, in <module>
    print aa.__fun2()
AttributeError: 'A' object has no attribute '__fun2'

"""私有方法,同样以双下划线开头"""

9.1.1、私有变量,私有方法,9.1.1私有变量方法

另外,在python中,两个下划线变量是被python在背后偷偷改了名字,改成了“_类名__变量名”形式的隐藏变量名,所以还有一种方法也可以调用私有的变量,如下:

 

else:

私有变量,私有方法:

  • python的私有化是为了规划私有属性,避免非相关的访问【假如!我有老婆,你不能直接知道我老婆是谁,你只有问我才会知道,即我的私有属性只有我知道】
  • 在python中定义私有变量和私有方法只需要在变量名或函数名前加上 "__"两个下划线
  • 在类内部的方法中使用时  self.__变量名或函数名。
  • 实际上,如果真要访问私有变量和私有方法,也是可以访问的,因为实际上私有化的操作只是将变量或函数名更改了而已:

    • 下例中由private_value变为了_A__private_value【即_类名__属性名】,但为了保持私有性,不建议直接使用这种方法访问
    class A:
        _private=6
        __private_value=5
        def __private_func(self):
            print("hello")
        def get_private_value(self):
            return self.__private_value
    a=A()
    # print(a.__private_value)###报错,找不到该属性
    print(a.get_private_value())
    print(a._A__private_value)
    
  • 私有化变量和方法的继承:【子类不会继承基类私有属性,但仍然通过基类的函数来获取或可以强行访问】

class A:
    _private=6
    __private_value=5
    def __private_func(self):
        print("hello")
    def get_private_value(self):
        return self.__private_value
class B(A):
    pass
b=B()
# print(b.__private_value)#报错
print(b.get_private_value())#可以使用父类的方法来获取私有属性
print(b._A__private_value)#强制访问还是可以的

私有变量,私有方法: python的私有化是为了规划私有属性,避免非相关的访问【假如!我有...

在上面的结果中可以看到name变量值是可以在实例化类后被调用的。
接着写一个私有的变量调用,如下:

aa = A()
print aa.__mingzi




Traceback (most recent call last):
  File "E:4.scriptworktest.py", line 21, in <module>
    print aa.__mingzi
AttributeError: 'A' object has no attribute '__mingzi'

return"live dog"

在python中定义私有变量只需要在变量名或函数名前加上两个下划线“__”,那么这个变量或函数就变成私有的了,不能在类地外部调用,可以在类的内部调用。
先写一个共有的变量调用,如下:

aa = A()
print aa._A__mingzi    # A前面只有一个下线线
print aa._A__fun2()



bingyishuangsa
This is private method

dog.set_age(44)

图片 1

 1 #-*-  coding:utf-8 -*-
 2 
 3 class A(object):
 4     name = "sashuangyibing"
 5     __mingzi = "bingyishuangsa"    # 这个是私有变量,只能在类A之内可以使用,超过类A之外是无法引用到
 6     def fun1(self):
 7         print "This is common method"
 8     def __fun2(self):   # 这个是私有方法,只能在类A之内可以使用,超过类A之外是无法引用到
 9         print "This is private method"
10     def fun4(self):
11         return self.__mingzi    # 该私有变量在当前类之内可以被引用
12 
13 class B(A):
14     def __init__(self):
15         super(B,self).__init__()
16     
17     def fun3(self):
18         print "fun3"
19         
20 aa = A()
21 print aa.name
22 print aa.fun4()
23 print aa._A__mingzi
24 aa._A__fun2()

# del dog

图片 2

试错验证,如果按下面方法织造引用私有变量,会报没有该属性

returnself.__age

图片 3

sashuangyibing
bingyishuangsa
bingyishuangsa
This is private method

"""魔术方法,对象被真正销毁之前,真正的销毁才会回调这个,包括手动或者系统销毁"""

图片 4

  

defwant_fuck(self,money):

在name变量名前加了两个下划线后,再按照上一步的步骤去调用__name变量时,结果报错了。
原因是在外部调用__name私有变量是调用不到的,可以在内部转化一下再调用,如下:

输出:

defset_age(self,age):

但是可以通过下面这种方法去引用私有变量和方法,在类名前面添加一个下划线

# time.sleep(5)

本文由必威发布于必威-编程,转载请注明出处:这个属性只能用self.来访问,python的私有化是为了

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。