激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 解析python 類方法、對象方法、靜態(tài)方法

解析python 類方法、對象方法、靜態(tài)方法

2020-08-15 23:43學到老 Python

這篇文章主要介紹了解析python 類方法、對象方法、靜態(tài)方法的的相關(guān)資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding:utf-8 -*-
#!/usr/bin/python
# Filename: method.py
 
class Person:
grade=1
def __init__(self,name):
self.name = name
def sayHi(self):#加self區(qū)別于普通函數(shù)
print 'Hello, your name is?',self.name
 
@staticmethod #聲明靜態(tài),去掉則編譯報錯;還有靜態(tài)方法不能訪問類變量和實例變量
def sayName():#使用了靜態(tài)方法,則不能再使用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、靜態(tài)方法

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

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

?
1
2
3
4
5
6
7
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作為非靜態(tài)方法同樣可以運行,但是它要提供self參數(shù),而這個參數(shù)在方法中根本不會被使用到。這里的@staticmethod裝飾器可以給我們帶來一些好處,Python不再需要為Student對象實例初始化一個綁定方法,綁定方法同樣是對象,但是創(chuàng)建需要成本,而靜態(tài)方法可以避免這些。

?
1
2
3
4
5
6
Student().year is Student().year
Student().aver_age is Student().aver_age
Student().aver_age is Student.aver_age
False
True
True

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

3、 類方法

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

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

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

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)  #通過對象調(diào)用
Dog.eat(Dog.age) #通過類調(diào)用
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 類方法、對象方法、靜態(tài)方法的詳細內(nèi)容,更多關(guān)于python 類方法、對象方法、靜態(tài)方法的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://cloud.tencent.com/developer/article/1065358

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜免费网 | 日韩精品中文字幕一区二区三区 | 调教小男生抽打尿孔嗯啊视频 | 蜜桃视频观看麻豆 | 国产91久久久 | 精品在线免费播放 | 久久久久久久国产a∨ | 欧美日韩在线视频观看 | 久久99国产精品久久99果冻传媒 | 国产精品久久久久影院老司 | 日本不卡一区在线观看 | 国产午夜三级一区二区三桃花影视 | 国产毛片毛片毛片 | 曰批全过程40分钟免费视频多人 | 玩偶姐姐在线观看免费 | av电影在线网站 | 在线观看一区二区三区四区 | 国产成人高清在线观看 | 久久影院午夜 | 激情综合视频 | 欧美韩国日本在线 | 黄色成年在线观看 | 欧美亚洲啪啪 | 成人国产精品一区 | 91九色电影 | 一级成人免费 | 国产精品亚洲一区二区三区在线观看 | av免费在线观看国产 | 黄色网址你懂的 | 97黄色网| 国产一区二区视频精品 | 欧美 videos粗暴 | 精品成人免费一区二区在线播放 | 成人三级电影网址 | japanese massage tube | 久久久久国产成人精品亚洲午夜 | 在线中文字幕网站 | 一起草av在线 | 爱爱视频天天干 | 久久国产在线观看 | 欧美日韩网站在线观看 |