在python中,所有的資料型別都被視為物件,也可以自定義物件,自定義物件資料型別就是物件導向中的類的概念。
類:用來描述具有相同屬性和方法的物件的集合,類定義了集合中每個物件共有的屬性和方法。物件是類的例項。
class
myclass:
'''a example class'''
x = 'abc'
#類屬性
deffoo
(self):
#類屬性foo,也是方法
return
'my class'
print(myclass.x)
print(myclass.foo)
print(myclass.__doc__)
class是關鍵字,不能重複 類名必須使用大駝峰命名 類定義完後,會產生乙個類物件繫結到了識別符號classname上。
類物件及類屬性
1,類物件,類的定義就會生成乙個類物件
2,類的屬性,類定義中的變數和類中定義的方法都是類的屬性
3,類變數,上例中x是類myclass的變數
myclass中,x 、foo 都是類的屬性,doc也是類的屬性
foo是方法物件method,不再是普通的函式物件function了。至少乙個引數self。self指代當前例項本身。
當我們呼叫類時,需要進行類的例項化,即建立乙個類的例項。python例項化後,會自動呼叫 《雙下劃線init雙下劃線》方法。作用:對例項進行初始化。
class
myclass:
def__init__
(self):
print('init')
print(1,myclass)#不會呼叫
print(2,myclass())#呼叫__init__
a = myclass()#呼叫 __init__
結果:
1 < class 『main.myclass』>
init
2 <main.myclass object at 0x0000000004c9d5f8>
init
上面的例項化:a = myclasss()
初始化函式可以有多個引數,第乙個引數必須是self。
class
person:
def__init__
(self,name,age):
self.name = name
self.age = age
defshowage
(self):
print('{} is {}'.format(self.name,self.age))
tom = person('tom',20)#例項化,會呼叫__init__方法並為 例項進行屬性的初始化
jerry = person('je',25)
print(tom.name,jerry.age)
jerry.age += 1
print(jerry.age)
jerry.showage()
tom 25
26 je is 26
例項物件instance
例項化後就會獲得乙個例項物件
類例項化後,得到乙個例項物件,例項物件會繫結方法,呼叫方法時採用jerry.showage()的方式,python會把方法的呼叫者作為第乙個引數self的實參傳入。self.name就是jerry物件的name,name是儲存在了jerry物件上,而不是person類上,所以,稱為例項變數。
例項變數和類變數有什麼區別呢?
class
person:
age = 3
def__init__
(self,name):
self.name = name
tom = person('tom')#例項化,初始化
jerry = person('jerry')
print(tom.name,tom.age)
print(jerry.name,jerry.age)
print(person.age)
person.age = 30
print(person.age,tom.age,jerry.age)
結果:
tom 3
jerry 3
3 30 30 30
上面例子可以看到:例項變數是每乙個例項自己的變數,是自己獨有的;類變數是類的變數,是類的所有例項共享的屬性和方法。
類的屬性儲存在類的dict中,例項屬性儲存在例項的dict中,從例項訪問類的屬性,就需要借助class找到所屬的類.
class
person:
age = 3
height = 170
def__init__
(self,name,age = 18):
self.name = name
self.age = age
tom = person('tom')#例項化、初始化
jerry = person('jerry',20)
person.age= 30
print(1,person.age,tom.age,jerry.age)
#print(person.__dict__)
#print(jerry.__dict__)
print(2,person.height,tom.height,jerry.height)
jerry.height = 175
print(3,person.height,tom.height,jerry.height)
tom.height += 10
print(4,person.height,tom.height,jerry.height)
person.height += 15
print(5,person.height,tom.height,jerry.height)
person.weight = 70
print(person.weight,tom.weight,jerry.weight)
print(tom.__dict__['height'])
#print(tom.__dict__['weight'])#不可以
print(tom.__dict__)
結果:
1 30 18 20
2 170 170 170
3 170 170 175
4 170 180 175
5 185 180 175
70 70 70
180
總結:1,是類的,就是這個類所有例項的,所有例項都可以訪問到;是例項的,就是這例項自身的,類訪問不到。2,類的變數屬於類的變數,類的所有例項可以共享這個變數。3,例項或類可以動態的給自己增加乙個屬性,tom.height 和 tom.dict[『height』] 訪問這個屬性。例項的同名變數會覆蓋掉類的變數。
例項使用 點號 來訪問屬性,先找自己的字典,沒有就自己類的字典中找,如果例項使用__dict__[變數名]訪問變數,就只從自己的字典中去找。
string類的建構函式和物件定義
c 知識點 string類的建構函式和物件定義 string類的建構函式原型 記住就好 1.string 預設建構函式,創造空串 2.string const char s 用字串來構造新字串 3.string const char s,unsigned n 用字串前n個字元來構造新串 4.stri...
Python 類的構造
定義dog類,類名一般首字母大寫。方法 init 是乙個特殊的方法,請注意是雙下劃線。每當你根據dog類建立新例項時,python都會自動執行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免python預設方法與普通方法發生名稱衝突。類的方法與普通的函式只有乙個特別的區別 它...
python類的定義和使用
python 類的使用。1.使用乙個名為 init 的方法來完成初始化。2.使用乙個名為 del 的方法來完成類似析購操作。3.所有的例項方法都擁有乙個 self 引數來傳遞當前例項,類似於 this。1 usr bin python 2 decoding gbk 3 4import sys 5 6...