国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python函數和類的一些研究

Wildcard / 3210人閱讀

摘要:與通常認為實例方法是的,而類方法是的,這種說法也沒錯,只是對于不同類型變量來說,結果是不同的測試一下結果顯示的都是直接從類訪問,結果這個實例方法顯示的是??梢灾赖囊饬x并不是始終不變的,對于不同的對象來說意義并不一樣。

bound與unbound

通常認為實例方法是bound的,而類方法是unbound的,這種說法也沒錯,只是對于不同類型變量來說,結果是不同的

class A(object):
    """test class"""
    _instance = None
    
    def __private(self):
        pass

    def _protect(self):
        pass

    def fs(self):
        pass

    @staticmethod
    def sm():
        pass

    @classmethod
    def fc(cls):
        pass

測試一下, 結果顯示的都是bound method

>>> a = A()
>>> a.fs
>
>>> a.fc
>

直接從類訪問,結果fs這個實例方法顯示的是unbound。可以知道bound的意義并不是始終不變的,對于不同的對象來說意義并不一樣。

>>> A.fs

>>> A.fc
>

python里面類方法實例方法可以等價變換

a.fs()
# equals
A.fs(a)

從描述器的角度看

>>> A.__dict__["fs"].__get__(None, A)


>>> A.__dict__["fs"].__get__(a, A)
>

>>> A.__dict__["fc"].__get__(None, A)
>

不過實例a調用靜態方法會出錯(TypeError),因為實例對方法的調用提供了self參數,但sm是沒有參數的。但是這提供了另一種思路)比如在python的多進程編程中,進程跑的函數如果是實例函數的會因為無法序列化而失敗,但如果是staticmethod就沒有問題,靜態函數的本質其實也就是普通函數。
所以可以這樣

class B(object):
    @staticmethod
    def run(inst):
        inst.foo()
    
    def foo(self):
        print "foo"

b = B()
B.run(b)

在2.x中區分實例函數和類函數可以用im_self

>>> A.fs.im_self
None
>>> A.fc.im_self

至于通過實例引用方法時的im_self的值,大家自己可以探索下

獲取類中所有定義的方法

使用dir函數

>>> dir(A)
["_A__private",
 "__class__",
 "__delattr__",
 "__dict__",
 "__doc__",
 "__format__",
 "__getattribute__",
 "__hash__",
 "__init__",
 "__module__",
 "__new__",
 "__reduce__",
 "__reduce_ex__",
 "__repr__",
 "__setattr__",
 "__sizeof__",
 "__str__",
 "__subclasshook__",
 "__weakref__",
 "_instance",
 "_protect",
 "fc",
 "fs",
 "sm"]

2 使用inspect.getmembers
這個除了函數名的字符串以外,連對象的type也得到了,結果更加詳細

>>> inspect.getmembers(A)
[("_A__private", ),
 ("__class__", type),
 ("__delattr__", ),
 ("__dict__",
  ,
   "__dict__": ,
   "__doc__": "test class",
   "__module__": "__main__",
   "__weakref__": ,
   "_instance": None,
   "_protect": ,
   "fc": ,
   "fs": ,
   "sm": }>),
 ("__doc__", "test class"),
 ("__format__", ),
 ("__getattribute__", ),
 ("__hash__", ),
 ("__init__", ),
 ("__module__", "__main__"),
 ("__new__", ),
 ("__reduce__", ),
 ("__reduce_ex__", ),
 ("__repr__", ),
 ("__setattr__", ),
 ("__sizeof__", ),
 ("__str__", ),
 ("__subclasshook__", ),
 ("__weakref__", ),
 ("_instance", None),
 ("_protect", ),
 ("fc", >),
 ("fs", ),
 ("sm", )]
判斷某個屬性是否可調用
a = A()
callable(getattr(a, "testattr", None))

獲得一個對象中所有可調用的方法

[method for method in dir(object) if callable(getattr(object, method))]
隱藏屬性

重寫__dict__或者__dir__

class C(object):
    __dict__ = {}
    
    def __dir__(self):
        return ["cherry"]

注意,這里的__dict__不是類的,是實例的,類的__dict__是不可寫的,不信可以試試
__dir__很奇怪,如果dir函數用在C的實例上,確實會返回["cherry"],但dir(C)還是能得到類中所有屬性,有點掩耳盜鈴的感覺,待繼續研究

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45409.html

相關文章

  • 【譯】python 靜態方法和類方法的區別

    摘要:盡管和非常相似,但在用法上依然有一些明顯的區別。所以,從靜態方法的使用中可以看出,我們不會訪問到本身它基本上只是一個函數,在語法上就像一個方法一樣,但是沒有訪問對象和它的內部字段和其他方法,相反會訪問,會訪問。 python staticmethod and classmethod Though classmethod and staticmethod are quite simil...

    Crazy_Coder 評論0 收藏0
  • [轉載]Python方法綁定——Unbound/Bound method object的一些梳理

    摘要:本篇主要總結中綁定方法對象和未綁定方法對象的區別和聯系。在中使用描述器有翻譯的鏈接來表示具有綁定行為的對象屬性,使用描述器協議方法來控制對具有綁定行為屬性的訪問,這些描述器協議方法包括和。其中通過限定的必須使用實例才能調用。 本篇主要總結Python中綁定方法對象(Bound method object)和未綁定方法對象(Unboud method object)的區別和聯系。主要目的...

    yankeys 評論0 收藏0
  • Python小白學習之路

    摘要:在類的成員函數中訪問實例屬性需要以為前綴。但提供一種對私有成員的訪問方式對象名類名私有成員類中保護對象類中系統定義的特殊成員類中私有成員多態列表項目 Python學習第一天 類與對象 python的成員函數在,默認有一個self參數,這是類的成員函數與普通函數的主要區別,self,位于參數列表的開頭,self也代表類的實例(對象)自身,可以使用self引用類中的屬性和成員函數。在...

    Aomine 評論0 收藏0
  • Python -- 元類metaclass詳解

    摘要:原鏈接中的元類是什么類也是對象在理解元類之前,需要掌握中類概念。事實上,是中用于創建所有類的元類。類本身是元類的對象在中,除了,一切皆對象,一切都是類或者元類的對象。事實上是自己的元類, 學習契機 項目中使用Elasticsearch(ES)存儲海量業務數據,基于ES向外提供的API進一層封裝,按需處理原始數據提供更精確、更多樣化的結果。在研究這一層的代碼時接觸到@six.add_me...

    tracy 評論0 收藏0
  • [零基礎學python]類的細節

    摘要:在對象接口后包裝其實現的細節,從而隔離了代碼的修改對用戶產生的影響。類提供了一個新的本地作用域,最小化了變量名沖突。類其實并沒有結束,不過本講座到此對類暫告一段。 前面對類的有關內容已經描述不少了,其實話題遠遠沒有結束,不過對于初學者,掌握這些已經算是入門,在以后的實踐中,還需要進行體會和感悟。 這幾天和幾個朋友以各種途徑討論過OOP的相關問題,他們是:令狐蟲、Frank、晉劍、小馮...

    Fundebug 評論0 收藏0

發表評論

0條評論

Wildcard

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<