Python 類與物件

2021-10-08 13:10:43 字數 4681 閱讀 7709

python從設計之初就已經是一門物件導向的語言,正因為如此,在python中建立乙個類和物件是很容易的。本章節我們將詳細介紹python的物件導向程式設計。

如果你以前沒有接觸過物件導向的程式語言,那你可能需要先了解一些物件導向語言的一些基本特徵,在頭腦裡頭形成乙個基本的物件導向的概念,這樣有助於你更容易的學習python的物件導向程式設計。

接下來我們先來簡單的了解下物件導向的一些基本特徵。

和其它程式語言相比,python 在盡可能不增加新的語法和語義的情況下加入了類機制。

python中的類提供了物件導向程式設計的所有基本功能:類的繼承機制允許多個基類,派生類可以覆蓋基類中的任何方法,方法中可以呼叫基類中的同名方法。

物件可以包含任意數量和型別的資料。

一般情況下,屬性儲存到例項物件中

而方法需要儲存到類物件中

語法格式如下:

class

classname

:1>..

.

類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性。

p1 = person()的執行流程

1.建立乙個變數

2.在記憶體中建立乙個新物件

3.__init__(self)方法執行

4.將物件的id賦值給變數

class 類名([父類]) :

公共的屬性...

# 物件的初始化方法

def __init__(self,...):

...# 其他的方法

def method_1(self,...):

...def method_2(self,...):

......

# 嘗試定義乙個表示人的類

class

person

:# 在類的**塊中,我們可以定義變數和函式

# 在類中我們所定義的變數,將會成為所有的例項的公共屬性

# 所有例項都可以訪問這些變數

name =

'swk'

# 公共屬性,所有例項都可以訪問

# 在類中也可以定義函式,類中的定義的函式,我們稱為方法

# 這些方法可以通過該類的所有例項來訪問

defsay_hello

(self)

:# 方法每次被呼叫時,解析器都會自動傳遞第乙個實參

# 第乙個引數,就是呼叫方法的物件本身,

# 如果是p1調的,則第乙個引數就是p1物件

# 如果是p2調的,則第乙個引數就是p2物件

# 一般我們都會將這個引數命名為self

# say_hello()這個方法,可以顯示如下格式的資料:

# 你好!我是 ***

# 在方法中不能直接訪問類中的屬性

print

('你好!我是 %s'

%self.name)

# 建立person的例項

p1 = person(

)p2 = person(

)print

(p2.name)

# 呼叫方法,物件.方法名()

# 方法呼叫和函式呼叫的區別

# 如果是函式呼叫,則呼叫時傳幾個引數,就會有幾個實參

# 但是如果是方法呼叫,預設傳遞乙個引數,所以方法中至少要定義乙個形參

# 修改p1的name屬性

p1.name =

'豬八戒'

p2.name =

'沙和尚'

p1.say_hello(

)# '你好!我是 豬八戒'

p2.say_hello(

)# '你好!我是 沙和尚'

del p2.name # 刪除p2的name屬性

print

(p1.name)

print

(p2.name)

在類的內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self, 且為第乙個引數,self 代表的是類的例項。

#類定義

class

people

:#定義基本屬性

name =

'' age =

0#定義私有屬性,私有屬性在類外部無法直接進行訪問

__weight =

0#定義構造方法

def__init__

(self,n,a,w)

: self.name = n

self.age = a

self.__weight = w

defspeak

(self)

:print

("%s 說: 我 %d 歲。"

%(self.name,self.age)

)# 例項化類

p = people(

'runoob',10

,30)p.speak(

)

特殊方法

在類中可以定義一些特殊方法(魔術方法)

特殊方法都是以__開頭,__結尾的方法

特殊方法不需要我們自己呼叫,不要嘗試去呼叫特殊方法

特殊方法將會在特殊的時刻自動呼叫

學習特殊方法:

1.特殊方法什麼時候呼叫

2.特殊方法有什麼作用

建立物件的流程

p1 = person()的執行流程

1.建立乙個變數

2.在記憶體中建立乙個新物件

3.init(self)方法執行

4.將物件的id賦值給變數

class

person

:# init會在物件建立以後離開執行

# init可以用來向新建立的物件中初始化屬性

# 呼叫類建立物件時,類後邊的所有引數都會依次傳遞到init()中

def__init__

(self,name)

:# print(self)

# 通過self向新建的物件中初始化屬性

self.name = name

defsay_hello

(self)

:print

(%self.name)

目前來講,對於person類來說name是必須的,並且每乙個物件中的name屬性基本上都是不同

而我們現在是將name屬性在定義為物件以後,手動新增到物件中,這種方式很容易出現錯誤

我們希望,在建立物件時,必須設定name屬性,如果不設定物件將無法建立

並且屬性的建立應該是自動完成的,而不是在建立物件以後手動完成

# p1 = person()

# # 手動向物件新增name屬性

# p1.name = '孫悟空'

# p2 = person()

# p2.name = '豬八戒'

# p3 = person()

# p3.name = '沙和尚'

# p3.say_hello()

p1 = person(

'孫悟空'

)p2 = person(

'豬八戒'

)p3 = person(

'沙和尚'

)p4 = person(

'唐僧'

)# p1.__init__() 不要這麼做

# print(p1.name)

# print(p2.name)

# print(p3.name)

# print(p4.name)

p4.say_hello(

)

嘗試自定義乙個表示狗的類(dog)

屬性:name

agegender

height

…方法:

jiao()

yao()

run()

class

dog:

''' 表示狗的類

'''def__init__

(self , name , age , gender , height)

: self.name = name

self.age = age

self.gender = gender

self.height = height

defjiao

(self)

:'''

狗叫的方法

'''print

('汪汪汪~~~'

)def

yao(self)

:'''

狗咬的方法

'''print

('我咬你~~'

)def

run(self)

:print

('%s 快樂的奔跑著~~'

%self.name)

d = dog(

'小黑',8

,'male',30

)d.name =

'阿黃'

d.age =-10

d.run(

)print

(d.age)

print

(d.name , d.age , d.gender , d.height)

Python 類與物件

引數 預設值 可變引數 關鍵字引數 命名關鍵字引數 返回值 python class student def init self,arg,kwargd 可變引數 arg kwargd if name in kwargd self.name kwargd name defmain s student ...

Python 類與物件

python是一種物件導向的程式語言。python中,幾乎所有東西都是乙個物件。物件有屬性和方法。類是用於建立物件的 藍圖 要建立類,請使用關鍵字class 示例 建立乙個名為myclass的類,其屬性名為x class myclass x 8現在可以使用myclass類建立物件 示例 建立乙個名為...

Python 類與物件

一.一 類 是對一群有相同特徵或者行為的事物的統稱,是抽象的,不可直接使用。二 物件 是由類創造出來的實體,可以直接使用。三 類與物件之間的關係 1.先有類再有物件 2.類只有乙個而物件可以有多個 四 類的設計 3要素 類名 大駝峰命名法 屬性 描述這類事物的特徵 方法 描述這類事物的具體行為 二....