Python高階 物件導向程式設計

2021-07-24 12:25:57 字數 2963 閱讀 8839

class

user

(object):

pass

按照慣例,類名以大寫字母開頭,緊接著是(object),表示該類是從 object 類進行繼承的。

user=user()
可以在類的建構函式 __init()__定義類的屬性。

class

user

(object):

def__init__

(self, name, age):

self.name = name

self.age = age

user = user('messi', '29')

print(user.name + ',' + user.age)

#messi,29

python對屬性許可權的控制是通過屬性名來實現的,如果乙個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問。

class

person

(object):

def__init__

(self, name):

self.name = name

self._title = 'mr'

self.__job = 'footballplayer'

p = person('messi')

print(p.name)#messi

print(p._title)#mr

print(p.__job)

#attributeerror: 'person' object has no attribute '__job'

從上面的例子中可以發現,只有以雙下劃線開頭的」__job」不能直接被外部訪問。

但是,如果乙個屬性以」__***__」的形式定義,那它又可以被外部訪問了,以」__***__」定義的屬性在python的類中被稱為特殊屬性,有很多預定義的特殊屬性可以使用,通常我們不要把普通屬性用」__***__」定義。

class

person

(object):

def__init__

(self, name):

self.name = name

self._title = 'mr'

self.__job__ = 'footballplayer'

p = person('messi')

print(p.name)#messi

print(p._title)#mr

print(p.__job__)#footballplayer

注意:以單下劃線開頭的屬性」_***」雖然也可以被外部訪問,但是,按照習慣,它們不應該被外部訪問。

class

person

(object):

address = 'china'

def__init__

(self, name):

self.name = name

p1 = person('liudehua')

p2 = person('zhangxueyou')

print(p1.address)#china

print(p2.address)#china

訪問許可權章節說道:如果乙個屬性由雙下劃線開頭(__),該屬性就無法被外部訪問。但是我們可以通過定義例項方法從類的內部進行訪問。

可以通過呼叫例項方法來訪問__job屬性。

class

person

(object):

def__init__

(self, name):

self.name = name

self._title = 'mr'

self.__job = 'footballplayer'

defget_job

(self):

return self.__job

p = person('messi')

print(p.get_job())#footballplayer

和屬性相似,方法也分為例項方法和類方法,在class中定義的全部是例項方法,例項方法第乙個引數 self 是例項本身。在 class 中定義類方法,需要運用註解@classmethod

class

user

(object):

hobby = 'football'

def__init__

(self, name, age):

self.name = name

self.age = age

@classmethod

defget_name

(cls):

return cls.hobby

if __name__ == '__main__':

user = user('messi', 29)

print(user.get_name())#football

介紹了@classmethod,這裡還介紹下註解@property。當類中的方法上使用註解@property,類的例項可以像訪問屬性一樣呼叫方法。

class

user

(object):

hobby = 'football'

def__init__

(self, name, age):

self.name = name

self.age = age

@property

defget_age

(self):

return self.age

if __name__ == '__main__':

user = user('messi', 29)

print(user.get_age)#29

python高階 物件導向

使用類名.mro 可以檢視到下乙個呼叫的是哪個父類 import copy deftest2 a,b,args,kwargs print print a print b print args print kwargs deftest1 a,b,args,kwargs print a print b ...

高階物件導向

最基本的物件導向寫法 建立建構函式 function aaa 構造方法 aaa.prototype.showname function 使用 建立例項 var a1 new aaa a1.showname 在js原始碼中 系統物件也是基於原型的程式 function array array.prot...

python高階 物件導向程式設計六 元類

typer produce class produce obj type稱謂元類,是所有類的類,利用type控制類的行為 模擬class關鍵字建立類的過程 建立類的兩種方式 方式一 class foo def func self print from func 方式二 x 1 def func se...