【美高梅开户网址】Python公有与私家,__del__魔术点子

壹 、在Python中要想定义的艺术依旧变量只在类内部使用不被表面调用,能够在措施和变量前边加 两个 下划线

① 、在Python中要想定义的点子依旧变量只在类内部使用不被表面调用,能够在措施和变量前面加【美高梅开户网址】Python公有与私家,__del__魔术点子。两个下划线

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

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变量名前加了四个下划线后,再依照上一步的手续去调用__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

美高梅开户网址 ,  

可是足以经过下边那种艺术去引用私有变量和情势,在类名前边添加二个下划线

defwant_fuck(self,money):

只是能够透过上面那种艺术去引用私有变量和措施,在类名后边添加1个下划线

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