假如程式如下:
class aaa():
name='沒有'
age=0
def __init__(self,name='tom',age=10):
self.name=name
self.age=age
def aa(self):
print(self.name,self.age)
@classmethod #注意這裡有修飾
def bb(cls):
print(cls.name,cls.age)
@staticmethod #注意這是有修飾
def cc():
print("這是static修飾方法")
print(aaa.name,aaa.age)
def dd(sel): #注意這是第一引數不是self
print(sel.name,sel.age)
例項化兩個變數a和b
b=aaa('張三',20) #傳遞兩個引數過去
a=aaa() #不傳引數使用預設值
1、執行如下:
b.aa()
a.aa()
結果:
張三 20 #b 例項化時傳遞了此兩個引數,所有結果正確
tom 10 #a 例項化時沒有傳遞引數,所有使用了初始值 結果正確
2、執行如下
#注意類方法bb()是用@classmethod修飾的
b.bb() #用例項b呼叫類方法bb()
aaa.bb() #用類名直接呼叫類方法bb()
a.bb() #用例項a呼叫類方法bb()
結果是:
沒有 0
沒有 0
沒有 0
無論是用例項呼叫 還是用類名呼叫類方法,返回的都是類成員變數值。
3、執行如下
a.dd() #用例項a呼叫普通方法dd()
b.dd() #用例項b呼叫普通方法dd()
結果是:
tom 10
張三 20
各例項的值成員變數值 沒有變
總結:這個實驗證明一點,類中的方法如果 加了@classmethod修飾後,無論使用什麼方式呼叫該方法取成員變數值,返回的都是類自身的成員變數值 ,不會返回例項成員變數值
Python 使用類和例項
class car 模擬汽車 def init self,name,model,year 初始化汽車的屬性 self.name name self.model model self.year year defget describe car self 返回描述性資訊 long name str se...
Python 使用類和例項
class car 模擬汽車 def init self,name,model,year 初始化汽車的屬性 self.name name self.model model self.year year defget describe car self 返回描述性資訊 long name str se...
python 類和例項
物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。仍以student類為例,在python中,定義類是通過class關鍵字 class stude...