簡體   English   中英

如何獲取用戶定義的方法名稱?

[英]How to get user-defined methods name?

我正在嘗試從 class 獲取所有用戶定義的方法名稱,例如:

class MyClass:
    def __init__(self, param1, param2):
        pass

    def one_method(self):
        pass

    def __repr__(self):
        pass

    def __str__(self):
        pass

    def __my_method_no_2(self, param2):
        pass

    def _my_method_no_3(self):
        pass

到目前為止,我已經采用以下方法:

import inspect 

[name for name, _ in inspect.getmembers(MyClass, inspect.isroutine)
 if name not in {'__init_subclass__', '__subclasshook__'} and 
 getattr(MyClass, name).__qualname__.startswith(MyClass.__name__)]

output:

['_MyClass__my_method_no_2',
 '__init__',
 '__repr__',
 '__str__',
 '_my_method_no_3',
 'one_method']

這是預期的 output,但這看起來“丑陋”,甚至不確定是否是正確的方法

Python 3.x中,您可以使用dir而無需 檢查或任何外部庫:

method_list = [func for func in dir(Foo) if callable(getattr(Foo, func))]

要處理您在 class 中新定義並在 class 中覆蓋的每個方法,試試這個:

class MyClass:
    li = []
    def __init__(self, param1, param2):
        pass

    def one_method(self):
        pass

    def __repr__(self):
        pass

    def __str__(self):
        pass

    def __my_method_no_2(self, param2):
        pass

    def _my_method_no_3(self):
        pass


print([func for func in dir(MyClass) if callable(getattr(MyClass, func)) and func in MyClass.__dict__])

輸出:

['_MyClass__my_method_no_2', '__init__', '__repr__', '__str__', '_my_method_no_3', 'one_method']


這里得到想法,但使用__dict__而不是dir

每個 python 對象都有一個__dict__屬性,其中包含所有屬性的名稱。 相關文檔在這里

這個想法是:從__dict__獲取屬性列表並過濾掉所有不可調用的內容

[attr for attr in  MyClass.__dict__ if callable(getattr(MyClass, attr))]

與您的 output 匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM