1. 程式人生 > 程式設計 >Python面向物件程式設計之靜態方法、類方法、屬性方法原理與用法分析

Python面向物件程式設計之靜態方法、類方法、屬性方法原理與用法分析

本文例項講述了Python面向物件程式設計之靜態方法、類方法、屬性方法原理與用法。分享給大家供大家參考,具體如下:

前言:認為方法與函式同意義,由於這裡使用method,所以稱為方法


靜態方法:

  • 使用@staticmethod來定義靜態方法。
  • 靜態方法:類和例項都可以呼叫的方法,實際上跟類沒什麼關係了,對於這種不太相關的就使用靜態方法【用例項和類呼叫沒有區別】
class Dog(object):
  def __init__(self,name):
    self.name=name
  def talk(self):
    print("%s is talking"%self.name)
  @staticmethod
  def eat(self,food):##
    print("%s is eating %s"%(self.name,food))

  @staticmethod
  def bulk(): ##如果不涉及例項變數的內容,可以不傳self
    print("wang wang!")

d=Dog("haha")
d.talk()
Dog.eat(d,"baozi")
d.eat(d,"mianbao")
d.bulk()
Dog.bulk()

注:由於不太相關,所以不會自動傳self,如果操作涉及物件的內容,需要手動傳入

image


類方法:

  • 使用@classmethod來定義類方法
  • 類方法只能訪問類變數,不能訪問例項變數
  • 如果涉及類變數比較多,而涉及例項變數比較少的話,使用類方法
class Dog(object):
  name="haha"
  def __init__(self,name):
    self.name=name

  @classmethod
  def eat(self):
    print(self)# <class '__main__.Dog'> 說明self是一個類
    print("%s is eating "%self.name)#所以只會呼叫類中的name

d=Dog("aotuman")
d.eat()##haha is eating
Dog.eat()##haha is eating
d2=Dog("huluwa")
d2.eat()

注:類方法中的self是一個類,因此才會只訪問類變數


屬性方法:

  • @property會把一個方法變成一個屬性
  • 為什麼會有屬性方法

現有需求:我輸入因數,你就會打印出我要的計算結果

用變數來實現:

image

缺點:無法約束賦值,假如我要限制不能輸入非數字【實際上,如果要做這樣的約束,就要建立一個函式,這實際上與屬性方法相同,而如果在my_sum裡面檢測的話,就比建立一個函式還要麻煩了】

用屬性方法來實現:

image

  • 程式碼:

解釋:

  • @property用於獲取;@setter用於賦值傳參;@deleter用於刪除屬性,並不影響其他與當前@property無關的函式
  • 要想他們三個關聯起來,函式名必須相同,且字首是@property修飾的函式的名

image

class calc:
  @property
  def my_sum(self):
    print(self.one+self.two)
  @my_sum.setter
  def my_sum(self,l):
    if isinstance(l[0],int)&isinstance(l[1],int):
      self.one=l[0]
      self.two=l[1]
    else:
      print("no int")
  @my_sum.deleter
  def my_sum(self):
    print("del done")
    del self.one,self.two
c=calc()
c.my_sum=[1,2]
c.my_sum
del c.my_sum

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。