物件導向程式設計的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 ...