91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python 類方法、對象方法、靜態方法的案例分析

發布時間:2020-08-17 10:05:46 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

小編給大家分享一下python 類方法、對象方法、靜態方法的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

python中實現靜態方法和類方法都是依賴于python的修飾器來實現的。 對象方法有self參數,類方法有cls參數,靜態方法是不需要這些附加參數的。

1、我們已經討論了類/對象可以擁有像函數一樣的方法,這些對象方法與函數的區別只是一個額外的self變量

# -*- coding:utf-8 -*-
#!/usr/bin/python
# Filename: method.py

class Person:
grade=1
def __init__(self,name):
self.name = name
def sayHi(self):#加self區別于普通函數
print 'Hello, your name is?',self.name

@staticmethod #聲明靜態,去掉則編譯報錯;還有靜態方法不能訪問類變量和實例變量
def sayName():#使用了靜態方法,則不能再使用self
print "my name is king"#,grade,#self.name

@classmethod #類方法
def classMethod(cls):
print("class method")

p = Person("king")
p.sayHi()
p.sayName()
p.classMethod()
Person.classMethod()

輸出:

Hello, your name is? king
my name is king
class method
class method

2、靜態方法

要在類中使用靜態方法,需在類成員函數前面加上@staticmethod標記符,以表示下面的成員函數是靜態函數。使用靜態方法的好處是,不需要定義實例即可使用這個方法。另外,多個實例共享此靜態方法。

靜態方法是一類特殊的方法,有時可能需要寫一個屬于這個類的方法,但是這些代碼完全不會使用到實例對象本身,例如:

class Student(object):
  @staticmethod
  def aver_age(x, y):
    return x + y

  def year(self):
    return self.aver_age(self.month, self.day)

這個例子中,如果把aver_age作為非靜態方法同樣可以運行,但是它要提供self參數,而這個參數在方法中根本不會被使用到。這里的@staticmethod裝飾器可以給我們帶來一些好處,Python不再需要為Student對象實例初始化一個綁定方法,綁定方法同樣是對象,但是創建需要成本,而靜態方法可以避免這些。

Student().year is Student().year
Student().aver_age is Student().aver_age
Student().aver_age is Student.aver_age
False
True
True

可讀性更好的代碼,看到@staticmethod我們就知道這個方法并不需要依賴對象本身的狀態。
可以在子類中被覆蓋,如果是把aver_age作為模塊的頂層函數,那么繼承自Student的子類就沒法改變Student的aver_age了如果不覆蓋year的話。

3、 類方法

類方法與普通的成員函數和靜態函數有不同之處,在接觸的語言中好像也沒見過這種語義,看它的定義:

一個類方法就可以通過類或它的實例來調用的方法, 不管你是用類來調用這個方法還是類實例調用這個方法,該方法的第一個參數總是定義該方法的類對象。

記住:方法的第一個參數都是類對象而不是實例對象.
按照慣例,類方法的第一個形參被命名為 cls.任何時候定義類方法都不是必須的(類方法能實現的功能都可以通過定義一個普通函數來實現,只要這個函數接受一個類對象做為參數就可以了).

class Dog(object):
  food = "gutou"
  age = "1"
  def __init__(self, name):
    self.NAME = name
  @classmethod
  def eat(self,age): #只能是類中的變量
    # print(self.NAME)
    print(age)
    print(self.food)

  @classmethod
  def eat1(self, age): # 只能是類中的變量
    # print(self.NAME)
    age = "2"
    self.food = "tang"
  @staticmethod
  def print_1():
    print(Dog.food, Dog.age)

d = Dog("labuladuo")
d.eat(Dog.age)  #通過對象調用
Dog.eat(Dog.age) #通過類調用
print("-----1-----")
d.eat1(Dog.age)
Dog.print_1()
print("--------2-------")
Dog.eat1(Dog.age)
Dog.print_1()

輸出:

1
gutou
1
gutou
-----1-----
('tang', '1')
--------2-------
('tang', '1')

以上是python 類方法、對象方法、靜態方法的案例分析的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸溪县| 华亭县| 台南市| 成都市| 鲁山县| 缙云县| 灵宝市| 宝鸡市| 依兰县| 景洪市| 唐海县| 定安县| 政和县| 屏东市| 武川县| 瑞昌市| 邛崃市| 天全县| 安达市| 大余县| 常熟市| 盐城市| 永济市| 马边| 丹凤县| 临潭县| 湄潭县| 凤冈县| 樟树市| 文安县| 北川| 资中县| 垦利县| 大港区| 察隅县| 上犹县| 和林格尔县| 广东省| 同德县| 安溪县| 香格里拉县|