亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

解析python 類方法、對象方法、靜態方法

瀏覽:2日期:2022-07-14 09:04:02

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

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

# -*- coding:utf-8 -*-#!/usr/bin/python# Filename: method.pyclass Person:grade=1def __init__(self,name):self.name = namedef sayHi(self):#加self區別于普通函數print ’Hello, your name is?’,self.name@staticmethod #聲明靜態,去掉則編譯報錯;還有靜態方法不能訪問類變量和實例變量def sayName():#使用了靜態方法,則不能再使用selfprint '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? kingmy name is kingclass methodclass 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().yearStudent().aver_age is Student().aver_ageStudent().aver_age is Student.aver_ageFalseTrueTrue

可讀性更好的代碼,看到@staticmethod我們就知道這個方法并不需要依賴對象本身的狀態??梢栽谧宇愔斜桓采w,如果是把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()

輸出:

1gutou1gutou-----1-----(’tang’, ’1’)--------2-------(’tang’, ’1’)

以上就是解析python 類方法、對象方法、靜態方法的詳細內容,更多關于python 類方法、對象方法、靜態方法的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 全部免费特黄特色大片农村 | 无人区二区三区地址 | 久久99青青久久99久久 | 俄罗斯美女bbbbxx | 香蕉精品视频在线观看 | 成人精品国产亚洲欧洲 | 欧美亚洲一区二区三区在线 | 国产一级特黄aaaa大片野外 | 国产大战女模特在线视频 | 精品国产精品久久一区免费式 | 麻豆国产精品入口免费观看 | 日韩精品午夜视频一区二区三区 | 国产成人啪午夜精品网站 | 免费高清资源黄网站在线观看 | 日韩精品一二三区 | 国内精品线在线观看 | 91成人在线免费视频 | 国产精品1页 | 在线日韩不卡 | 久久久久久国产精品mv | 国产在线播 | 美女免费观看一区二区三区 | 一级生性活免费视频 | 亚洲 日本 欧美 中文幕 | 成人午夜视频在线 | 国产91情侣在线精品国产 | 久久精品不卡 | 黄片毛片大全 | 在线亚洲精品国产成人二区 | 九九在线免费观看视频 | 99久久伊人| 国产一区二区免费在线 | 91精品国产高清在线入口 | 国产色婷婷精品免费视频 | 国产一级片免费视频 | 久久精品国产亚洲香蕉 | 大伊香蕉在线精品不卡视频 | 欧美一级一级做性视频 | 亚洲国产精 | 黄色毛片在线观看 | 成年女美黄网站大全免费播放 |