python類與物件基本語法

2021-10-11 09:21:20 字數 4328 閱讀 6175

物件導向程式設計的2個非常重要的概念:類和物件。

物件是物件導向程式設計的核心,在使用物件的過程中,為了將具有共同特徵和行為的一組物件抽象定義,提出了另外乙個新的概念——類。

本人學習筆記基於python2的版本進行測試。

定義乙個類

class person:

age=10

#下面***沒有進行初始化是會報錯的

#***

name="intsmaze"

def getpersoninfo(self):

print("age is %d;name is %s"%(self.age,self.name))

必須要進行tab縮進來區分類的成員,同時類的屬性必須指定乙個值,否則會報nameerror: name '_person__age' is not defined錯誤。

建立類的物件

vi demo.py

class person:

age=10

name="intsmaze"

def getpersoninfo(self):

print("age is %d;name is %s"%(self.age,self.name))

def get***(self):

print("*** is %s"%self.***)

# 建立物件 

ly=person() # 呼叫物件的getpersoninfo方法 ly.getpersoninfo() # 訪問屬性 print(ly.age)# 新增屬性ly.***="man"

ly.get***()

python demo.py

age is 10;name is intsmaze

10*** is man

建立物件的格式為:物件名 = 類名()。這裡的name和age都是公有的,可以直接在類外通過物件名訪問,如果想定義成私有的,則需在前面加2個下劃線 即'__',當然也可以在類建立物件後,向物件新增屬性。

vi demo2.py

class person:

__age=10

__name="intsmaze"

def getpersoninfo(self):

print("age is %d;name is %s"%(self.__age,self.__name))

ly=person()

ly.getpersoninfo()

print(ly.__age)

python demo2.py

age is 10;name is intsmaze

traceback (most recent call last):

file "class2.py", line 9, in print(ly.__age)

attributeerror: person instance has no attribute '__age'

私有屬性是不能夠在類外通過物件名來進行訪問的。在python中沒有像c++中public和private這些關鍵字來區別公有屬性和私有屬性,它是以屬性命名方式來區分,如果在屬性名前面加了2個下劃線'__',則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個下劃線的話表示該方法是私有的,否則為公有的)。

類的方法

在類中可以定義一些方法,定義方法採用def關鍵字,在類中定義的方法至少會有乙個引數,一般以名為self的變數作為該引數(用其他名稱也可以),而且需要作為第乙個引數。

vi demo3.py

class person:

__age=18

def getpersoninfo(self):

print("age is %d"%self.__age)

def getpersoninfo2(self,age):

if(self.__agepython中沒有過載的概念,即不能方法過載。

python demo3.py

age is 18

too old

age is 10

所謂的self,可以理解為自己。可以把它當做c++中類裡面的this指標一樣理解,就是物件自身的意思,在用某個物件呼叫該方法時,就將該物件作為第乙個引數傳遞給self。類的構造器vi demo4.py

class person:

__name="intsmaze"

def __init__(self):

self.__age=20

self.__name="liuyang"

def getpersoninfo(self):

print("age is %d;name is %s"%(self.__age,self.__name))

ly=person()

ly.getpersoninfo()

python demo4.py

age is 20;name is liuyang
物件在預設呼叫__init__()方法的時候傳遞一些引數

vi demo5.py

class person:

__name="intsmaze"

#def __init__(self):

# self.__age=20

# self.__name="liuyang"

def __init__(self, age, name):

self.__age = age

self.__name = name

def getpersoninfo(self):

print("age is %d;name is %s"%(self.__age,self.__name))

#ly=person()

#ly.getpersoninfo()

ly=person(100,"hello")

ly.getpersoninfo()

python demo5.py

age is 100;name is hello
構造器也不能過載,如果把上面的注釋去掉,呼叫指令碼將會報錯。構造器方法,在建立乙個物件時預設被呼叫,不需要手動呼叫。

析構

建立物件時,預設呼叫構造方法;當刪除乙個物件時,同樣也會預設呼叫乙個方法,這個方法為析構方法

vi dem6.py

# 建立物件

#encoding=utf-8

class animal():

# 構造方法

def __init__(self):

print '---構造方法被呼叫---'

# 析構方法

def __del__(self):

print '---析構方法被呼叫---'

# 建立物件

dog = animal()

# 刪除物件

del dog

python dem6.py

---構造方法被呼叫---

---析構方法被呼叫---

列印物件

class person:

__name="intsmaze"

def __str__(self):

return "my name is "+self.__name

ly=person()

print(ly)

如果不重寫__str__方法,則print(ly)將列印該物件的記憶體位址。

原文和作者一起討論:

python類基本語法筆記

語言是工具,一段時間不用就會忘掉語法。靜態方法和類方法 什麼時候會用到這樣的方法呢?類方法是針對類存在的,可以用類直接呼叫。主要用到的兩個函式是staticmethod 和classmethod 簡潔的用法是用python的修飾器。需要注意到python的方法是引用型的,這樣的好處是可以直接賦值,或...

Python基本語法之元類

什麼是元類 在python中,萬物均為物件,如整數 字串 函式以及類都是物件。元類就是類的類,也就說元類也是一種物件,只不過是一種特殊的物件。當我們使用關鍵字class時python在幕後會為我們建立類,而這就是通過元類來實現的,type就是python在背後用來建立所有類的元類,也就是說,type...

Python 類與物件

引數 預設值 可變引數 關鍵字引數 命名關鍵字引數 返回值 python class student def init self,arg,kwargd 可變引數 arg kwargd if name in kwargd self.name kwargd name defmain s student ...