python的封裝、繼承、多態

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中模塊與包的導入

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章