python 類屬性和實例屬性,類方法,實例方法和靜態方法

類屬性和實例屬性

  • 類屬性:在Python中我們可以通過類名直接訪問的屬性,可分爲公有類屬性和私有類屬性(類似於Java中的靜態成員變量),公有屬性可直接訪問,而私有屬性則要通過自定義的get和set方法來訪問(對象來調用get與set方法)。
  • 實例屬性:實例對象(通過類創建的對象)擁有的屬性,通過類名無法直接訪問。對象可以在外部給直接添加屬性(不建議使用,因爲對象屬性應該封裝在類的內部,否則容易產生一些隱式錯誤),這個屬性也叫實例屬性。通常來講,實例屬性都在初始化方法__init()內部定義並且由傳入的參數賦值(類似Java中的構造方法)。
  • 需要注意的是,對象訪問類屬性不會對原類屬性造成影響,因爲當實例化對象後,內存中會給這個對象分配一片空間,因此這個對象訪問的類屬性是自己這片空間的類屬性(相當於副本),所以通過對象直接來改變類屬性是無法對原類屬性產生影響的。
class people:
   name = "tom"  # 類屬性
   __height = 180

   def __init__(self, age):
       self.age = age  # 實例屬性
   def getHeight(self):
       return self.__height
   def setHeight(self,height):
       self.__height = height

print("通過類名訪問:" + people.name)
p = people(20)
p.name="max"
p.setHeight(190)
print("通過對象訪問:%s %d %d"%(p.name,p.age,p.getHeight()))
print("通過類名訪問:" + people.name) #p.name="max"並沒有影響到原類屬性

結果:
在這裏插入圖片描述

類方法,實例方法和靜態方法

  • 類方法:類對象所擁有的方法,需要用修飾器@classmethod來標識,第一個參數必須是類對象,一般以cls作爲第一個參數(當然你也可以不叫cls,這只是一種習慣與規範),能夠通過實例對象和對象(類名)去訪問。類方法可以讓實例對象去修改類屬性的值(上面已經講過,實例對象無法直接修改類屬性的值)
class people:
   name = "tom"  # 類屬性
   def __init__(self, age):
       self.age = age  # 實例屬性

   @classmethod
   def setName(cls,name):
       cls.name=name

p=people(20)
p.setName("max")
print(people.name)

結果:
在這裏插入圖片描述

  • 實例方法:實例對象所擁有的方法,類對象無法訪問(不能直接通過類名調用)。第一個參數必須是實例對象,一般以self作爲第一個參數(同理,你也可以不叫self,這只是一種習慣與規範),通過實例對象去調用。
class people:
   name = "tom"  # 類屬性
   def __init__(self, age):
       self.age = age  # 實例屬性
   def showAge(self):
       print("年齡:%d"%(self.age))

p=people(20)
p.showAge()

結果:
在這裏插入圖片描述

  • 靜態方法:需要通過修飾器@staticmethod,不需要定義參數,可以當做普通函數使用。
class people:
   name = "tom"  # 類屬性
   def __init__(self, age):
       self.age = age  # 實例屬性

   @staticmethod
   def showAge():
       print("姓名:"+people.name)

people.showAge()
p=people(20)
p.showAge()

結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章