python中,類的命名使用帕斯卡命名方式,即首字母大寫。
python中定義類的方式如下:
class省略父類名表示該類直接繼承自類名([父類名[,父類名[,...]]]):
pass
object
,類的例項化如下:
classperson():
def__init__
(self):
pass
person=person()
__init__()
是類的建構函式,在例項化時呼叫,它的引數self
表示類例項。
欄位的訪問級別:
classperson類成員:person():
age = 24_name = '
person
'__family_name = '
securate
'def
__init__
(self):
print('
person init
')
在上圖中,我們可以看到類中並沒有出現一雙下劃線開頭的字段__family_name,而多出乙個_person__family_name。說明類例項不可以直接訪問__family_name,但可以通過例項名._person__family_name
的方式來訪問。
上述三種型別的變數均可以通過類或類例項進行訪問。通過self
定義的變數只能通過類例項進行訪問,如self.country
,變數country
只能通過類例項進行訪問。
python中方法名均為小寫字母,不同單詞間以下劃線進行分割。
方法的覆蓋
python類中沒有方法的過載,對於具有相同名稱的方法,後面的定義會覆蓋掉前面的定義;子類會覆蓋父類中同名的方法。在person類中定義兩個同名方法say
:
def程式執行結果:say(self, message):
(message)
defsay(self, info):
print('
second:
'+info)
person=person()
person.say(
'invoke
')
從程式執行結果可知,呼叫的是定義在後面的say(self, info)
方法。
特殊方法
以雙下劃線開頭和結尾的方法屬於特殊方法,如:__init__(self)
、__call__(self)
等內建方法。在我們自己定義方法時不建議採取這種方式。
方法的訪問級別
和字段類似,上述訪問級別也只是一種程式設計約定,即便是以雙下劃線開頭的方法,在類的外部也是可以訪問的,但不建議這麼做。
例項方法
定義方法時,沒有裝飾器修飾且帶有引數的(可以不是self),即為例項方法。
類外部通過類例項來呼叫,類內部通過self.方法名
來呼叫。
def@classmethodmethod(self):
pass
@classmethod是python中的裝飾器。
使用@classmethod
修飾的方法,必須要帶引數(預設引數名是cls),該引數表示類自身。可以通過類自身或者類例項呼叫@classmethod
修飾的方法。在@classmethod
修飾的方法中無法訪問例項成員,但可以通過cls或者類名訪問類中的字段。
@staticmethod
使用@staticmethod
修飾的方法可以沒有引數,可以通過類或者類例項呼叫。在@staticmethod
修飾的方法中,無法訪問類中的例項成員,可以通過類名訪問類中的字段。
定義乙個chinese類,繼承自person類:
classchinese中的字段:chinese(person):
def__init__
(self):
pass
chinese=chinese()
從chinese型別的例項中,我們可以看到chinese類繼承了除country
之外的所有字段。
子類還會繼承父類中的函式,若子類沒有實現自己的建構函式(__init__(self)
),那麼在例項化子類時會呼叫父類的建構函式。
class執行型別轉換:person():
def__init__
(self):
pass
defconvert(self, class_type):
ifissubclass(class_type, person):
return
(class_type)(self)
class
chinese(person):
def__init__(self, convert=none):
pass
defcn_method(self):
print('
chinese')
class
japanese(person):
def__init__(self, convert=none):
pass
jap =japanese()型別轉換結果如下圖:cn =jap.convert(chinese)
cn.cn_method()
可以看到,根據japanese例項得到了chinese型別例項。這裡的轉換只是獲取了chinese型別的例項cn,而原有的japanese型別例項依然存在於記憶體中。
程式執行結果如下圖:
Python類繼承物件
類宣告從object繼承有什麼理由嗎?我剛剛找到了執行此操作的 但找不到很好的理由。class myclass object class code follows.難學python的歷史 python最初對類的再現在許多方面都被破壞了。到發現此故障時,已經為時已晚,他們必須予以支援。為了解決此問題,...
python中的類,物件,例項,繼承,多型
恢復內容開始 類 通俗來講是 屬性和方法的集合 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件,即為類的例項,物件可呼叫類的屬性和方法 類的定義,需要以大寫開頭來定義類的名字 class test class test 定義類 首字母大寫 a 12345 ...
Python物件導向 類的繼承
基本概念 物件導向三要素之一,繼承inheritance 上例可以看出,通過繼承 貓類不同寫 直接繼承了父類的屬性和方法。繼承 定義格式如下 class 子類名 基類1 基類2,語句塊如果類定義時,沒有基類列表,等同於繼承自object。在python3中object類是所有物件的根基類 class...