“封装(encapsulation)”是对对象(object)的一种抽象,将某些部分隐藏起来,在程序外部看不到,无法调用。
-
#!/usr/bin/env python
-
# coding=utf-8
-
'''
-
__tes 是私有方法,te方法和__tes方法在同一个类中,可以调用。
-
'''
-
class Test(object):
-
def __init__(self):
-
self.a = "a is here"
-
self.__b = "b is here"
-
def __tes(self):
-
print "func __tes is here"
-
def te(self):
-
print "func te is here"
-
self.__tes()
-
if __name__ == "__main__":
-
c = Test()
-
print c.a
-
print c.te()
-
print c.__tes
-
-
执行结果:
-
a is here
-
func te is here
-
func __tes is here
-
None
-
Traceback (most recent call last):
-
File "class5.py", line 16, in <module>
-
print c.__tes()
-
AttributeError: 'Test' object has no attribute '__tes'
访问和修改私有字段;
property函数(只读)
@property可以将python定义的函数当做属性访问
-
#!/usr/bin/env python
-
# coding=utf-8
-
'''
-
使用装饰器@property之后,在调用私有变量属性。
-
'''
-
class Test(object):
-
def __init__(self):
-
self.a = "i'm a"
-
self.__b ="i'm b"
-
#使用属性方法将tes()方法变为一个类的静态属性。使之变为可读属性。
-
@property
-
def tes(self):
-
return self.__b
-
#使__b私有字段变成可写,只需调用tes属性并直接赋值即可(装饰器格式为‘@函数名.setter’)
-
@tes.setter
-
def tes(self,value):
-
self.__b = value
-
-
if __name__ == "__main__":
-
c = Test()
-
print c.tes
-
print '------'
-
c.tes = "i'm already not b"
-
print c.tes
执行结果:
-
i'm b
-
------
-
i'm already not b
阅读(737) | 评论(0) | 转发(0) |