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