import inspect
# Works both for python 2 and 3
def getClassName(anObject):
if (inspect.isclass(anObject) == False): anObject = anObject.__class__
className = anObject.__name__
return className
# Works both for python 2 and 3
def getSuperClassNames(anObject):
superClassNames = []
if (inspect.isclass(anObject) == False): anObject = anObject.__class__
classes = inspect.getmro(anObject)
for cl in classes:
s = str(cl).replace('\'', '').replace('>', '')
if ("__main__." in s): superClassNames.append(s.split('.', 1)[1])
clName = str(anObject.__name__)
if (clName in superClassNames): superClassNames.remove(clName)
if (len(superClassNames) == 0): superClassNames = None
return superClassNames
class.__mro__ This attribute is a tuple of classes that are
considered when looking for base classes during method resolution.
class.mro() This method can be overridden by a metaclass to
customize the method resolution order for its instances. It is called
at class instantiation, and its result is stored in __mro__.
这里有两种方法同时适用于Python2和Python3
参数可以是实例或类
使用
__mro__
属性:这是在类实例化时填充的special attribute:
相关问题 更多 >
编程相关推荐