是否有任何理由要继承类声明object?
我刚刚发现了一些代码,我找不到一个很好的理由.
class MyClass(object):
# class code follows...
Run Code Online (Sandbox Code Playgroud) 假设我有一套西装和四个西装子类:Heart,Spade,Diamond,Club.
class Suit:
...
class Heart(Suit):
...
class Spade(Suit):
...
class Diamond(Suit):
...
class Club(Suit):
...
Run Code Online (Sandbox Code Playgroud)
我有一个接收套装作为参数的方法,它是一个类对象,而不是一个实例.更确切地说,它可能只收到四个值中的一个:Heart,Spade,Diamond,Club.我怎样才能做出确保这样的事情的断言?就像是:
def my_method(suit):
assert(suit subclass of Suit)
...
Run Code Online (Sandbox Code Playgroud)
我正在使用Python 3.
我已经看到了以下问题,但它并没有让我想到我想要的地方:如何在Python中获取当前模块中所有类的列表?
特别是,我不想要导入的类,例如,如果我有以下模块:
from my.namespace import MyBaseClass
from somewhere.else import SomeOtherClass
class NewClass(MyBaseClass):
pass
class AnotherClass(MyBaseClass):
pass
class YetAnotherClass(MyBaseClass):
pass
Run Code Online (Sandbox Code Playgroud)
如果我使用clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass)链接问题中的接受答案建议,它将返回MyBaseClass并且SomeOtherClass除了本模块中定义的3之外.
我怎么才能得到NewClass,AnotherClass而且YetAnotherClass?
假设一个简单的类:
class MyClass(object):
pass
.
.
.
m = MyClass
print type(m) # gets: <type 'classobj'>
# if m is classobj, how can i check a variable is class object?
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何检查变量是否为类对象?
简单的解决方案:
if str(type(m)) == "<type 'classobj'>":
# do something
Run Code Online (Sandbox Code Playgroud)
但我认为至少有一种经典方法可以检查.
str()并且repr()可以用来打印一个变量的内容在python.但变量的内容可能非常复杂.该pprint库,作为PHPvar_dump()等价物报告,非常适合以易于阅读的格式显示数据:什么是Python的var_dump()的Python等价物?,Python中是否有一个函数来打印对象的所有当前属性和值?
但是,如果有数据对象([编辑]尚未实施__str__或__repr__)str(),repr()而pprint只是给了他们的名字.我想要一个可以递归遍历对象属性的方法,正确地给出变量的整个表示.
某些功能(例如内置版)不应打印,因为它没用.该方法还应该能够处理诸如getattr抛出异常之类的问题.也许自定义迭代也可以像列表一样处理.
我在下面给了它一个镜头.并不是说它不起作用,但我确信没有考虑边缘情况,可能还有一些输出缺失的信息(例如区分元组/列表).我的意思是说,请分享替代方案:)