python之物件 類 方法

2021-09-25 12:07:57 字數 3416 閱讀 9709

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...