一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

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

服務器之家 - 腳本之家 - Python - 解析python 類方法、對象方法、靜態方法

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

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

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

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

1、我們已經討論了類/對象可以擁有像函數一樣的方法,這些對象方法與函數的區別只是一個額外的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區別于普通函數
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標記符,以表示下面的成員函數是靜態函數。使用靜態方法的好處是,不需要定義實例即可使用這個方法。另外,多個實例共享此靜態方法。

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

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

?
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我們就知道這個方法并不需要依賴對象本身的狀態。
可以在子類中被覆蓋,如果是把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 類方法、對象方法、靜態方法的詳細內容,更多關于python 類方法、對象方法、靜態方法的資料請關注服務器之家其它相關文章!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 特级毛片免费视频观看 | 国产亚洲精品福利在线 | 日本美女动态图片 | 美女脱了内裤打开腿让男人图片 | 丝袜足控免费网站xx动漫漫画 | 国产免费一区二区三区免费视频 | 日韩高清成人毛片不卡 | 娇小性色 | 欧美日韩国产中文字幕 | 高清不卡免费一区二区三区 | 日韩久久精品 | 爽好舒服使劲添高h视频 | 91小视频在线观看免费版高清 | 丁香六月婷婷激情 | 日韩精品免费一级视频 | 国产成人青草视频 | 四虎精品成人免费影视 | 男公厕里同性做爰 | 国产视频久久久久 | 暴露狂婷婷 | 免费一区二区 | 99在线视频精品 | 国产1区精品 | 99re热精品这里精品 | 欧美一级级a在线观看 | 免费成年网站 | 大桥未久一区二区 | 亚洲视频在线观看地址 | 天天爽天天操 | 99久久精品免费看国产情侣 | 亚洲2023无矿砖码砖区 | 日韩欧美亚洲天堂 | 香蕉成人国产精品免费看网站 | 深夜激情网站 | 日本在线视频免费看 | 幻女free性zoz0交 | 无人区大片免费播放器 | 男人爱看的网站 | 特级av毛片免费观看 | 无限好资源免费观看 | 国产区香蕉精品系列在线观看不卡 |