在類中你能寫的所有內容都是類的成員
變量
1.實例變量
class person:
def __init__(self,name,age,id):
#這些變量都是實例變量,
self.name = name
self.age = age
self.id = id
p = person("劉老六","88","10086")
print(p.name) #輸出"劉老六"
#如果需要修改裏面的內容,可以
p.name = "吳老五"
print(p.name) #輸出"吳老五"
類變量
#類變量
class preson:
#類變量,每一個類都有一個自己的名稱空間,類變量是屬於類的但是可以被方法調用
counter = "中國"
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
p = preson("劉老六","88","10086")
p2 = preson("吳老五","86","10001")
print(p.name)
print(p.age)
print(p.counter) #輸出:中國
p.counter = "大清朝"
print(p.counter) #輸出 : 大清朝
#此時上面沒有修改類變量,因爲此時上面定義的大清是修改了p的內存空間的變量,沒有修改preson的.
print(p2.counter) # 輸出: 中國
#####################################################################
#類變量
class preson:
counter = "中國"
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
#此時修改的纔是類中的變量
preson.counter = "大明"
p = preson("劉老六","88","10086")
p2 = preson("吳老五","86","10001")
print(p.counter) #輸出 : 大明
p.counter = "大清朝"
print(p.counter) #輸出"大清"
print(p2.counter) #輸出 : 大明
方法
1.實例方法
使用 對象.方法 調用的就是實例方法
之前寫的都是
class computer:
#此處定義兩個方法
def play(self):
print("電腦可以打遊戲")
#在定義一個方法的時候必須給出一個參數,默認是self
#在聲明的時候,需要給出self,self必須放在第一個位置
def work(self):
print("電腦可以寫代碼")
c = computer()
c.play()
#在調用的時候,會默認把對象傳遞給self
c.work()
2.類方法
類方法是屬於類的,在生命的時候,需要給出一個能夠接受類名的參數,cls
在調用的時候,自動把XX對象的類傳遞給cls
#類方法
class preson:
def chi(self):
print("人會吃飯")
@classmethod
def he(cls): #此時cls接受到的是類名
print(cls)
print("人還能和水")
p = preson() #輸出:<class '__main__.preson'>
p.he() #輸出:人還能和水
print(preson) #輸出:<class '__main__.preson'>
#類方法一般用類名去訪問,但是類名不能調用實例方法.
preson.he() #輸出 : 人還能和水
類變量最好是由類方法去調用
3.靜態方法
靜態方法也是屬於類的,但是他不需要傳遞self和cls,就好比在類中定義了一個函數
靜態方法一般和類方法差不多,也都使用類名去訪問
class preson:
@staticmethod #靜態方法
def yue():
print("約嗎?")
# 靜態方法可以使用對象訪問,也能使用類名訪問,推薦使用類名訪問
p = preson()
p.yue() #輸出 :約嗎?
preson.yue() #輸出 : 約嗎?