xticks用法 - 在Python中獲取實例的類名




python畫圖標題 (6)

type()?

>>> class A(object):
...    def whoami(self):
...       print type(self).__name__
...
>>>
>>> class B(A):
...    pass
...
>>>
>>>
>>> o = B()
>>> o.whoami()
'B'
>>>

我如何找到一個在Python中創建一個對象實例的類的名字,如果我這樣做的函數是派生實例類的基類?

在想,也許檢查模塊可能會幫助我在這裡,但它似乎並沒有給我想要的。 並沒有解析__class__成員,我不知道如何得到這些信息。


你想把這個類的名字當作一個字符串嗎?

instance.__class__.__name__

您是否嘗試過__name__屬性? 即type(x).__name__會給你類的名字,我認為你想要的是這個名字。

>>> import itertools
>>> x = itertools.count(0)
>>> type(x).__name__
'count'

此方法僅適用於新式類 。 你的代碼可能會使用一些舊式的類。 以下兩種作品適用於:

x.__class__.__name__

或者,您可以使用classmethod

class A:
    @classmethod
    def get_classname(cls):
        return cls.__name__

    def use_classname(self):
        return self.get_classname()

用法

>>> A.get_classname()
'A'
>>> a = A()
>>> a.get_classname()
'A'
>>> a.use_classname()
'A'

class A:
  pass

a = A()
str(a.__class__)

上面的示例代碼(當在交互式解釋器中輸入時)將產生'__main__.A' ,而不是'A' ,如果調用__name__屬性則產生'A' 。 只需將A.__class__的結果傳遞給str構造函數,即可為您處理解析。 不過,如果你想要更明確的東西,你也可以使用下面的代碼。

"{0}.{1}".format(a.__class__.__module__,a.__class__.__name__)

如果您在單獨的模塊中定義具有相同名稱的類,則此行為可能更好。

上面提供的示例代碼在Python 2.7.5中進行了測試。


type(instance).__name__ != instance.__class__.__name  #if class A is defined like
class A():
   ...

type(instance) == instance.__class__                  #if class A is defined like
class A(object):
  ...

例:

>>> class aclass(object):
...   pass
...
>>> a = aclass()
>>> type(a)
<class '__main__.aclass'>
>>> a.__class__
<class '__main__.aclass'>
>>>
>>> type(a).__name__
'aclass'
>>>
>>> a.__class__.__name__
'aclass'
>>>


>>> class bclass():
...   pass
...
>>> b = bclass()
>>>
>>> type(b)
<type 'instance'>
>>> b.__class__
<class __main__.bclass at 0xb765047c>
>>> type(b).__name__
'instance'
>>>
>>> b.__class__.__name__
'bclass'
>>>




python-datamodel