一千萬個為什麽

搜索

在Python中確定變量是一個新式的類?

我正在使用Python 2.x,我想知道是否有辦法判斷一個變量是否是一個新式的類?我知道,如果它是一個舊式的課程,我可以做以下事情來找出答案。

import types

class oldclass:
  pass

def test():
  o = oldclass()
  if type(o) is types.InstanceType:
    print 'Is old-style'
  else:
    print 'Is NOT old-style'

但我找不到任何適用於新式課程的東西。我找到了這個問題,但建議的解決方案似乎沒有按預期工作,因為簡單的值被識別為類。

import inspect

def newclass(object):
  pass

def test():
  n = newclass()
  if inspect.isclass(n):
    print 'Is class'
  else:
    print 'Is NOT class'
  if inspect.isclass(type(n)):
    print 'Is class'
  else:
    print 'Is NOT class'
  if inspect.isclass(type(1)):
    print 'Is class'
  else:
    print 'Is NOT class'
  if isinstance(n, object):
    print 'Is class'
  else:
    print 'Is NOT class'
  if isinstance(1, object):
    print 'Is class'
  else:
    print 'Is NOT class'

那麽無論如何要做這樣的事情?或者Python中的所有內容都只是一個類,並且沒有辦法解決這個問題?

最佳答案

我想你要問的是:“我可以測試一個類是否在Python代碼中定義為一個新式的類?”。技術上簡單的類型(如 int )是新樣式類,但仍然可以區分用Python編寫的類和內置類型。

這是有用的東西,雖然它有點像黑客:

def is_new_style(cls):
    return hasattr(cls, '__class__') \
           and \
           ('__dict__' in dir(cls) or hasattr(cls, '__slots__'))


class new_style(object):
    pass

class old_style():
    pass

print is_new_style(int)
print is_new_style(new_style)
print is_new_style(old_style)

Python 2.6的輸出:

False
True
False

這是一種不同的方式:

def is_new_style(cls):
    return str(cls).startswith('

轉載註明原文: 在Python中確定變量是一個新式的類?