php語言
PHP即“超文本預處理器”,是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域
類及類的繼承(以及多重繼承)
類的名字首字母必須要大寫
class Student(如果繼承的話,寫父類,否則爲空):
pass
多重繼承
import random as r
class Fish:
def._init_(self):
self.x=random(1,10)
self.y=random(1,10)
def.move(self):
self.x-=1
print("我的位置是",self.x,self.y)
class Goldfish
pass
class shark(Fish):
def._init_(self):
super._init_(self)//對父類屬性的初始化
self.hungry=True//加上子類的屬性
def eat(self):
if self.hungry:
print("吃飽啦")
self.hungry=False
else:
print("太撐了,吃不下啦")
實例—類名()
student = Student()
__init__方法(類的屬性,給類加屬性)—創建方法時會被自動調用
由於類起到模板的作用,因此,可以在創建實例的時候,把我們認爲必須綁定的屬性強制填寫進去。這裏就用到Python當中的一個內置方法__init__方法,例如在Student類時,把name、score等屬性綁上去:
class Student(object):
def __init__(self, name, score)://加上了name和score屬性
self.name = name
self.score = score
>>>student = Student("Hugh", 99)//實例化傳參之後的對象,self不用寫
>>>student.name
"Hugh"
>>>student.score
99
(1)、__init__方法的第一參數永遠是self
表示創建的類實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因爲self就指向創建的實例本身。
(2)、有了__init__方法 在創建實例的時候,就不能傳入空的參數了,
必須傳入與__init__方法匹配的參數,但self不需要傳,Python解釋器會自己把實例變量傳進去:
類的方法
class Student(obiect):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print "%s: %s" % (self.name, self.score)
>>>student = Student("Hugh", 99)
>>>student.print_score
Hugh: 99
私有變量( 只有類的內部可以訪問)
如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線,在Python中,實例的變量名如果以__開頭,就變成了一個私有變量(private),只有內部可以訪問,外部不能訪問,所以,我們把Student類改一改:
//self.name 代表整個類裏邊的變量,name表示外邊傳進來的變量
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print "%s: %s" %(self.__name,self.__score)
改完後,對於外部代碼來說,沒什麼變動,但是已經無法從外部訪問實例變量.__name和實例變量.__score了:
>>> student = Student('Hugh', 99)
>>> student.__name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
這樣就確保了外部代碼不能隨意修改對象內部的狀態,這樣通過訪問限制的保護,代碼更加健壯。
但是如果外部代碼要獲取name和score怎麼辦?可以給Student類增加get_name和get_score這樣的方法:
class Student(object):
...
def get_name(self):
return self.__name
def get_score(self):
return self.__score
如果又要允許外部代碼修改score可以給Student類增加set_score方法:
def set_score(self, score):
self.__score = score
不同的self
1、屬性中的self
self.name 代表整個類裏邊的變量,name表示外邊傳進來的變量 即把傳入的外部變量,賦到類中的內部變量中去
2、方法中的變量,def get_score(self):
是爲了實例化多個對象時,標識對象本身
組合—把不具備繼承關係的平行類放到一個類中(在類中實例化對象就好)
比如說定義一個水池類,水池裏面有魚和烏龜
class Turtle:
def._init_(self,x):
self.num=x
class fish:
def._init_(self,y):
self.num=y
class pool:
def._init_(self,x,y):
self.turtle=Turtle(x)
self.fish=Fish(y)
def.whatpool(self,x,y):
print("水池裏面有%d只魚和%d只烏龜,"%(self.fish.num,self.Turtle.num))
pool=new pool(1,10)
pool.whatpool()
Python中的BIF就是Built-in Functions,即內置函數的意思*
檢測一個類是否是另一個類的子類
issubclass(B,object)
true
檢測一個實例對象是否屬於一個類
測定一個對象是否有某個屬性(name要以字符串的形式,否則函數會以爲x是一個變量)
返回該對象中該參數的指定值
class A:
def._init_(x):
self.x=x
getattr(A,'x',"您所訪問的屬性不存在")
設置對象中指定屬性的值
刪除對象中指定的屬性
模塊—import +模塊名(在Python可理解爲對應於一個文件)
1,improt 模塊名
調用:模塊名.功能名
2,import 模塊名 as 別名
調用:別名.功能名
3,from 模塊名 import 功能名
調用:直接功能名
4,from 模塊名 import 功能名 as 別名
調用: 直接拿別名來用
5,from 模塊名 import*
(用 * 號 一次性導入所有功能)
調用:直接功能名 注意點:* 號沒法用別名
python 中__name__ = ‘main’ 的作用
讓你寫的腳本模塊既可以導入到別的模塊中用,另外該模塊自己也可執行。
#module.py
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()
這個函數定義了一個main函數,我們執行一下該py文件發現結果是打印出”we are in main“,說明我們的if語句中的內容被執行了,調用了main():
但是如果我們從另我一個模塊導入該模塊,並調用一次main()函數會是怎樣的結果呢
from module import main
main()
其執行的結果是:we are in module
但是沒有顯示”we are in main“,也就是說模塊__name__ = ‘main’ 下面的函數沒有執行。
這樣既可以讓“模塊”文件運行,也可以被其他模塊引入,而且不會執行函數2次。這纔是關鍵。
總結(部分代碼的執行與否)
如果我們是直接執行某個.py文件的時候,該文件中那麼”name == ‘main’“是True,但是我們如果從另外一個.py文件通過import導入該文件的時候,這時__name__的值就是我們這個py文件的名字而不是__main__。
這個功能還有一個用處:調試代碼的時候,在”if name == ‘main’“中加入一些我們的調試代碼,我們可以讓外部模塊調用的時候不執行我們的調試代碼,但是如果我們想排查問題的時候,直接執行該模塊文件,調試代碼能夠正常運行!
包(package)
init文件的作用,是告訴 把這個文件當作包來管理
爬爬爬爬蟲
URL組成:協議、域名、路徑
Python中模塊與包的導入