簡體   English   中英

如何列出類函數內的變量或屬性?

[英]How to list the variables or attribute inside a function of a class?

示例代碼:

class hello:
    cls_var_name='Hello_Class'
    def setdata(self, value):
        self.data=value
        fun1_var_name='Setdata_Function'
    def showdata(self):
        fun2_var_name='Showdata_Function'
        print(self.data)

因此,借助dir()函數,我們可以列出一個類的所有屬性。 但是如何在類的函數中列出變量/屬性。

演示:

>>> dir(hello)
['__doc__', '__module__', 'cls_var_name', 'setdata', 'showdata']
>>>
>>> dir(hello.setdata)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']
>>>
>>> dir(hello.showdata)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__',
 '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']

在上面的輸出中,您可以在dir(hello)結果中看到類的屬性列表: 'cls_var_name', 'setdata', 'showdata'

但是對於dir(hello.setdata)dir(hello.showdata)結果,它列出了所有相關屬性,但沒有fun1_var_namefun2_var_name變量,為什么?

原因是dir函數顯示綁定到對象的屬性和屬性的列表。 fun_var_name不是setdata方法的屬性,它是一個存在於方法主體范圍內的變量,一旦退出就會被丟棄。

因此,當您調用dir(hello.showdata)時,除非在showdata方法內進行調用, func2_var_name不存在,但即使存在,該變量仍然不會使用dir函數出現,因為它未綁定到可調用對象方法對象。 (“可調用方法對象”只是方法的另一個術語,但它強調了方法,就像 python 中的幾乎所有東西一樣,也是對象。)

如果您想要的是訪問變量名稱列表的方法,您可以使用vars()函數,但它只會顯示已經定義且在當前范圍內的變量。 像這樣:

class hello:
    cls_var_name='Hello_Class'

    def setdata(self, value):
        self.data=value
        fun1_var_name='Setdata_Function'
        print(vars())

    def showdata(self):
        fun2_var_name='Showdata_Function'
        print(self.data)
        print(vars())

無法從方法主體外部獲取變量名稱,因為這些變量不存在。

可以使用inspect模塊並獲取實際源代碼的案例,但我認為這不是您的想法。

暫無
暫無

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

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