Python中的類屬性,類方法與例項屬性,例項方法
阿新 • • 發佈:2018-11-21
class Person(object):
num=10000
def __init__(self,name):
self.name=name
@classmethod
def getNum(cls):
return cls.num
def getName(self):
return self.name
p=Person("張三”)
p.age=12
1、類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在一個副本,上面這段程式碼中,num為類屬性。
2、name和age這種在__init__方法中新增的屬性或通過例項物件名新增的屬性為例項屬性。
3、類方法就是加上 @classmethod註解的方法,如getNum方法,它的第一個引數必須是當前類物件(一般寫成cls,但不是必須為cls)。
4、例項方法就是不加@classmethod註解的方法,如getName方法,它的第一個引數必須是當前例項物件(一般寫成self,但不是必須為self)。
5、類屬性被所有該類的例項物件所共有,例項物件(非私有)和例項物件的方法可以訪問類屬性,但是不能進行修改,若修改則是在當前例項物件中新增一個與類屬性同名的例項屬性,所以類屬性對於例項方法和例項物件是隻讀。
class Person(object): num=10000 def __init__(self,name): self.name=name @classmethod def getNum(cls): #print(self.name) #類方法不能訪問例項屬性 print(cls.num) def getNum1(self): print(self.num) self.num=10 print(self.num) p1=Person("張三") p2=Person("李四") p1.getNum1() p2.getNum()
6、類方法不能訪問例項屬性
class Person(object):
num=10000
def __init__(self,name):
self.name=name
@classmethod
def getNum(cls):
print(cls.name) #類方法不能訪問例項屬性
print(cls.num)
p1=Person("張三")
p1.getNum()
cls代表Person類物件,因為Person類物件中沒有name屬性,name屬性在例項物件self中。