1. 程式人生 > >Python中的類屬性,類方法與例項屬性,例項方法

Python中的類屬性,類方法與例項屬性,例項方法

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中。