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要素 類名 大駝峰命名法 屬性 描述這類事物的特徵 方法 描述這類事物的具體行為 二....