威尼斯人线上娱乐

【威尼斯人线上娱乐】个人方法,Python公有与个人

28 3月 , 2019  

一 、在Python中要想定义的法子恐怕变量只在类内部选用不被外表调用,能够在章程和变量前边加 两个 下划线

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

classDog:

在python中定义私有变量只须求在变量名或函数名前拉长四个下划线“__”,那么那一个变量或函数就改为私有的了,无法在类地外部调用,可以在类的当中调用。
先写3个共有的变量调用,如下:

 

 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

  

然而足以经过上边那种办法去引用私有变量和方法,在类名前边添加三个下划线

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