視頻地址:http://v.youku.com/v_show/id_XNTgyOTg4NjQ4.htmlhtml
普及網絡安全知識,推進信息技術發展。python
爲祖國的網絡安全撐起一片藍天,爲網絡安全愛好者構建一方家園。程序員
歡迎來到灰帽程序員論壇,咱們的網址是:http://www.hmhacker.orgweb
論壇是以技術交流爲主(非商業性質論壇,不從事任何非法入侵活動)shell
你們好,我是小雨,QQ:798033502編程
今天給你們帶來的教程是《Python編程系列教程第12講——屬性和方法》安全
1、屬性網絡
在python中,屬性分爲公有屬性和私有屬性,公有屬性能夠在類的外部調用,私有屬性不能在類的外部調用。公有屬性能夠是任意變量,私有屬性是以雙下劃線開頭的變量。編程語言
下面咱們定義一個People類,它有一個公有屬性name,和一個私有屬性__age。spa
class People():
def __init(self):
self.name='張珊'
self.__age=24
咱們建立一個People類的實例,P1,當咱們調用它的私有屬性__age時發現有以下錯誤。
>>> p1.__age
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
p1.__age
AttributeError: 'People' object has no attribute '__age'
這就說明了私有屬性不能夠在類的外部使用。那麼咱們要想調用私有屬性的值,就能夠在類的內部經過定義一個方法來調用。
>>> class People():
def __init__(self):
self.name='jack'
self.__age=23
def showinfo(self):
print(self.__age)
>>> p2=People()
>>> p2.showinfo()
23
可能有人會問,爲何加上雙下劃線的屬性,咱們就不能夠在類的外部調用了呢?那麼下面咱們就探討下python面向對象的私有機制。
Python中以雙下劃線開頭的屬性和方法,在被實例化後會自動在其名字前加_classname.由於名字被改變了,因此天然沒法經過雙下滑線開頭的名字來訪問,從而達到不可進入的目的。
咱們能夠經過實例名.__dict__來查看對象的屬性集合。
Python中不一樣於其餘面向對象的編程語言,python的設計哲學就是簡單至上,所以若是你真的想要調用私有屬性的話仍是能夠調用的。
2、方法
在python中方法分爲公有方法、私有方法、類方法和靜態方法。
下面咱們看一個比較完整的例子
#!/usr/bin/python
#coding:utf-8
__author__ = 'MXi4oyu'
class People():
def __init__(self):
self.name='張珊'
self.__age=23
def fun1(self):
#共有方法能夠在類的外部進行調用
#能夠經過對象名.方法名來調用
print("共有方法")
def __fun2(self):
#私有方法不能在類的外部進行調用
#能夠在類的其餘方法中調用私有方法
print("私有方法")
def funcshow(self):
self.__fun2()
@classmethod
#類方法要加上@classmethod修飾器,類方法能夠經過類名.方法名進行調用
def fun3(self):
print("類方法")
@staticmethod
#靜態方法須要加上@staticmethod修飾器,靜態方法不須要加self,一樣能夠經過類名.方法名調用
def fun4():
print("靜態方法")
if __name__=='__main__':
p1=People()
p1.fun1()
p1.funcshow()
People.fun3()
People.fun4()