python是物件導向程式設計的,物件可以理解為一系列資料以及訪問和操作這些資料的方法。
與物件屬性相關聯的函式稱為方法。
>>>object.get_price() #方法
使用物件的好處有:多型、封裝、繼承。
多型:不需要知道變數指向哪種物件,也可以對其操作。
>>> def add(x,y): #可以使用不同型別的引數呼叫函式
return x+y
>>> add(1,7)
8>>> add('yxd','hy')
'yxdhy'
封裝:向外部隱藏了內部的細節。
多型與封裝的區別:多型讓你無需知道物件的型別就能呼叫其方法,封裝是讓你無需知道物件的構造就能使用它。
要讓方法或者屬性成為私有的(不能從外部訪問),只需要讓其名稱以兩個下劃線打頭。
繼承:基於通用類建立出專有類。
類是一種物件,每個物件都屬於特定的類,並被稱為該類的例項。當乙個類的物件為另乙個物件的子集,前者為子類,後者為超類。
>>> class person:
def set_name(self,name): #self指向物件本身;
self.name=name
def get_name(self):
return self.name
>>> foo=person() #foo作為第乙個引數自動傳遞;這個引數就是self;
>>> foo.set_name("yxd")
>>> foo.get_name()
'yxd'
子類擴充套件了超類:
>>> class filter:
def init(self):
self.blocked=
def filter(self,sequence):
return [x for x in sequence if x not in self.blocked]
>>> class spamfilter(filter): #直接繼承超類的方法定義;
def init(self): #子類重寫超類的方法;
self.blocked=[1]
>>> f=filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
>>> s=spamfilter()
>>> s.init()
>>> s.filter([1,2,3])
[2, 3]
>>> issubclass(spamfilter,filter) #判斷另乙個類是否為另乙個類的子類
true
>>> spamfilter.__bases__ #求乙個類的基類
(,)>>> s=spamfilter() #判斷物件是否為特定類的例項
>>> isinstance(s,spamfilter)
true
>>> s.__class__ #判斷物件屬於哪個類
抽象基類:不能被例項化的類,只能被繼承。定義子類的一組方法。
@this被稱為裝飾器;
@abstractmethod 標記方法為抽象,在子類中必須實現的方法。
>>> class talker(abc):
@abstractmethod #抽象方法
def talk(self):
pass
>>> class kingget(talker):
pass
>>> k=kingget() #不能例項化
traceback (most recent call last):
file "", line 1, in k=kingget()
typeerror: can't instantiate abstract class kingget with abstract methods talk
>>> class kingget(talker): #重寫了抽象方法才能例項化
def talk(self):
print("ni!")
>>> k=kingget()
>>> k.talk()
ni!
建構函式:__init__
(左右各兩個下劃線),將在物件建立後自動呼叫
>>> class foobar:
def __init__(self,values=42): #建構函式
self.somevar=values
>>> f=foobar("yxd")
>>> f.somevar
'yxd'
重寫建構函式必須呼叫超類的建構函式;
>>> class bird:
def __init__(self):
self.hungry=true
def eat(self):
if self.hungry:
print('aaaah')
self.hungry=false
else:
print("no,thinks!")
>>> class songbird(bird): #重寫建構函式,老版本
def __init__(self):
bird.__init__(self)
self.sound='aquawk!'
def sing(self):
print(self.sound)
>>> sb=songbird()
>>> sb.sing()
aquawk!
>>> sb.eat()
aaaah
>>> sb.eat()
no,thinks!
>>> class songbird(bird): #重寫建構函式 用super() 新版本
def __init__(self):
super().__init__()
self.sound='aquawk!'
def sing(self):
print(self.sound)
python 類方法 物件方法 靜態方法
1 我們已經討論了類 物件可以擁有像函式一樣的方法,這些 物件方法與函式的區別只是乙個額外的 self 變數 coding utf 8 usr bin python filename method.py class person grade 1 def init self,name self.nam...
python 類方法 物件方法 靜態方法
1 我們已經討論了類 物件可以擁有像函式一樣的方法,這些物件方法與函式的區別只是乙個額外的self變數 coding utf 8 usr bin python filename method.py class person grade 1 def init self,name self.name n...
python之物件常用方法
type 類 常用來判斷物件型別,基本型別都可以判斷出來,如果我們想要比較出物件屬性,比如乙個函式,乙個類,我們通常可以使用types模組中定義的常量 例子 import types class animal object def init self self.name tim class test...