一 、在Python中要想定义的主意可能变量只在类内部使用不被外表调用,能够在点子和变量前边加 两个 下划线

一 、在Python中要想定义的不二法门依然变量只在类内部使用不被表面调用,能够在章程和变量前边加两个下划线

classDog:

在python中定义私有变量只要求在变量名或函数名前增进五个下划线“__”,那么这些变量或函数就改成私有的了,无法在类地外部调用,可以在类的当中调用。
先写三个共有的变量调用,如下:

 

 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()

Python公有与私家,__del__魔术点子。def__init__(self):

金沙注册送58 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变量值是足以在实例化类后被调用的。
接着写1个个体的变量调用,如下:

输出:

sashuangyibingbingyishuangsabingyishuangsaThis is private method

#本条本性只好用self.来访问,没办法用dog.访问

金沙注册送58 2

sashuangyibing
bingyishuangsa
bingyishuangsa
This is private method

 

self.__age =10

在name变量名前加了八个下划线后,再根据上一步的手续去调用__name变量时,结果报错了。
案由是在表面调用__name私有变量是调用不到的,能够在里面转化一下再调用,如下:

 

试错验证,假诺按下边方法织造引用私有变量,会报没有该属性

self.name =”shit”

金沙注册送58 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

金沙注册送58 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

  

但是能够经过下边那种方法去引用私有变量和章程,在类名前面添加2个下划线

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()

金沙注册送58,  

 

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地图