【亚洲必赢官网】python私有属性,私有变量和民用方法

一 、在Python中要想定义的艺术或者变量只在类内部采取不被外表调用,能够在艺术和变量后边加 两个 下划线

一 、在Python中要想定义的办法恐怕变量只在类内部使用不被表面调用,能够在情势和变量前面加两个下划线

classDog:

在python中定义私有变量只要求在变量名或函数名前增进三个下划线“__”,那么那个变量或函数就变成私有的了,不可能在类地外部调用,能够在类的里边调用。
先写1个共有的变量调用,如下:

 

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

def__init__(self):

亚洲必赢官网 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()

输出:

#民用属性,以双下划线开端,那样就没办法以点的款型拜访了

在上头的结果中得以观望name变量值是足以在实例化类后被调用的。
随即写一个私人住房的变量调用,如下:

输出:

sashuangyibingbingyishuangsabingyishuangsaThis is private method

#这几个天性只好用self.来访问,不能用dog.访问

亚洲必赢官网 2

sashuangyibing
bingyishuangsa
bingyishuangsa
This is private method

 

self.__age =10

在name变量名前加了多个下划线后,再依据上一步的步调去调用__【亚洲必赢官网】python私有属性,私有变量和民用方法。name变量时,结果报错了。
原因是在外表调用__name私有变量是调用不到的,可以在里头转化一下再调用,如下:

 

试错验证,尽管按上边方法织造引用私有变量,会报没有该属性

self.name =”shit”

亚洲必赢官网 3

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

aa = A()print aa.__mingziTraceback (most recent call last):  File "E:\04.script\work\test.py", line 21, in <module>    print aa.__mingziAttributeError: 'A' object has no attribute '__mingzi'

defget_age(self):

除此以外,在python中,七个下划线变量是被python在幕后偷偷改了名字,改成了“_类名__变量名”格局的藏身变量名,所以还有一种方式也得以调用私有的变量,如下:

aa = A()
print aa.__mingzi




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

  

returnself.__age

亚洲必赢官网 4

  

aa = A()print aa.__fun2()Traceback (most recent call last):  File "E:\04.script\work\test.py", line 21, in <module>    print aa.__fun2()AttributeError: 'A' object has no attribute '__fun2'

defset_age(self,age):

aa = A()
print aa.__fun2()




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

  

self.__age = age

  

然则能够透过上边这种艺术去引用私有变量和情势,在类名前面添加1个下划线

defwant_fuck(self,money):

亚洲必赢官网 ,不过可以透过上边那种措施去引用私有变量和措施,在类名前边添加一个下划线

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

ifmoney >200:

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



bingyishuangsa
This is private method

  

self.__fuck()

  

 

else:

 

print(“fuck yourself”)

def__fuck(self):

“””私有方法,同样以双下划线伊始”””

print(“this is a private func,fuck you”)

def__del__(self):

“””魔术点子,对象被真正销毁以前,真正的销毁才会回调那个,包含手动还是系统销毁”””

print(“dog is dead”)

def__str__(self):

return”live dog”

importtime

dog = Dog()

dog.set_age(44)

#调用私有变量

print(dog.get_age())

print(dog.name)

#调用私有方法

dog.want_fuck(300)

dog1 = dog

#实地衡量,那个方法会删除对象,可是借使有多少个引用,它只会去除有个别引用,而不是确实销毁对象

# del dog

# time.sleep(5)

# print(dog)

importsys

#测算某目的的引用个数,可是它自身也会使引用个数加1

count = sys.getrefcount(dog1)

print(count)

网站地图xml地图