日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习高级篇(part2)--类方法,静态方法,访问控制

發布時間:2023/12/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习高级篇(part2)--类方法,静态方法,访问控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考,有錯必糾

學習資源:圖解python


文章目錄

      • 類方法
        • 舉個例子
      • 靜態方法
        • 舉個例子
      • 訪問控制
        • 舉個例子
        • 舉個例子
        • 舉個例子


類方法

類方法指的是類對象中使用裝飾器@classmethod進行裝飾的方法。在類對象中定義類方法時,必須使用裝飾器@classmethod進行裝飾,此外,第一個形參表示類對象其對應的實參由系統自動傳入。第一個形參的名稱通常是cls,也可以是其它名稱。
類方法可以被類對象所調用,語法格式為:類對象.方法名([實參])或cls.方法名([實參])。
類方法也可以被實例對象所調用,語法格式為:實例對象.方法名([實參])或self.方法名([實參])。
類對象的所有實例對象都有一個指向類對象的指針,所以,類對象的所有實例對象都可以調用類對象中定義的類方法。

調用類方法時,系統自動將類對象作為實參傳遞給第一個形參。第一個實參會傳遞給第二個形參第二個實參會傳遞給第三個形參,依次類推。

舉個例子

代碼:

class MyClass(object):@classmethoddef cm1(cls, p1, p2):print(p1, p2)@classmethoddef cm2(cls):MyClass.cm1(1, 2)cls.cm1(1, 2)def im(self):self.cm1(1, 2)MyClass.cm1(1, 2) mc = MyClass()mc.cm1(1, 2) mc.cm2()mc.im()

輸出:

1 2 1 2 1 2 1 2 1 2

靜態方法


類對象的靜態方法只是一個普通函數。把某個普通函數歸屬于類對象,可能只是為了易于代碼管理
在類對象中定義靜態方法時,必須使用裝飾器@staticmethod進行裝飾。靜態方法只是一個普通函數因此,第一個形參沒有特殊含義和要求。
靜態方法可以被類對象所調用,語法格式為:類對象.方法名([實參])或cls.方法名([實參])。

靜態方法也可以被實例對象所調用,語法格式為:實例對象.方法名([實參])或self.方法名([實參])。

調用靜態方法時的參數傳遞與調用普通函數是一樣的。


舉個例子


代碼:

class MyClass(object):@staticmethoddef sm(p1, p2):print(p1, p2)@classmethoddef cm(cls):MyClass.sm(1, 2)cls.sm(1, 2)def im(self):self.sm(1, 2)MyClass.sm(1, 2) mc = MyClass()mc.sm(1, 2) MyClass.cm() mc.im()

輸出:

1 2 1 2 1 2 1 2 1 2

訪問控制


訪問控制指的是:控制類對象的屬性和方法在類對象的外部是否可以直接訪問
如果在類對象的某個屬性或方法前添加兩個下劃線_,那么在類對象的外部就不能直接訪問該屬性或方法了。


舉個例子


代碼:

class MyClass(object):def __init__(self):self.__pia = 18def __pim(self):print("__pim()被調用了")mc = MyClass() print(mc.__pia)

輸出:

Traceback (most recent call last):File "fangwenkongzhi.py", line 15, in <module>print(mc.__pia) AttributeError: 'MyClass' object has no attribute '__pia'

之所以不能在類對象的外部直接訪問以雙下劃線開頭的屬性或方法,是因為:Python解釋器對外把屬性或方法__xxx改成了另外一個名字:_類名__xxx。所以,在類對象的外部仍然可以通過_類名__xxx訪問屬性或方法__xxx。但是,強烈建議不要這樣訪問,因為不同版本的Python解釋器可能會把屬性或方法__xxx改成不同的名字。

同時,仍然可以在類對象的外部動態綁定名為__XXX的屬性或方法,但是,這與類對象內部名為__XXX的屬性或方法
是不同的。

舉個例子

代碼:

class MyClass(object):def __init__(self):self.__pia = 18def __pim(self):print("__pim()被調用了")def do_sth(self):print(self.__pia)self.__pim()mc = MyClass()mc.do_sth()print(mc._MyClass__pia) mc._MyClass__pim() print(dir(mc))mc.__pia = "Hi" print(mc.__pia) print(dir(mc))

輸出:

18 __pim()被調用了 18 __pim()被調用了 ['_MyClass__pia', '_MyClass__pim', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'do_sth'] Hi ['_MyClass__pia', '_MyClass__pim', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__pia', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'do_sth']

除了在類對象的屬性或方法前添加兩個下劃線_,還可以在類對象的屬性或方法前添加單下劃線_,
這表示:雖然可以在類對象的外部訪問該屬性或方法,但是最好不要訪問。

舉個例子

代碼:

class SomeClass(object):def __init__(self):self._pia = 18def _pim(self):print("_pim()被調用了")sc = SomeClass()print(sc._pia) sc._pim()

輸出:

18 _pim()被調用了

總結

以上是生活随笔為你收集整理的python学习高级篇(part2)--类方法,静态方法,访问控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。