相关疑难解决方法(0)

如何列出类的所有字段(没有方法)?

假设o是一个Python对象,我想要所有的字段o,没有任何方法或__stuff__.如何才能做到这一点?

我尝试过这样的事情:

[f for f in dir(o) if not callable(f)]

[f for f in dir(o) if not inspect.ismethod(f)]
Run Code Online (Sandbox Code Playgroud)

但这些返回相同dir(o),大概是因为dir给出了一个字符串列表.此外,__class__即使我让这个工作,这里也会返回.

python introspection python-2.7

44
推荐指数
5
解决办法
5万
查看次数

如何按声明的顺序读取类属性?

我写一个元类读取类的属性,并将它们存储在列表中,但我想要的清单(cls.columns)尊重声明的顺序(即:mycol2,mycol3,zut,cool,menfin,a在我的例子):

import inspect
import pprint

class Column(object):
    pass

class ListingMeta(type):
    def __new__(meta, classname, bases, classDict):
        cls = type.__new__(meta, classname, bases, classDict)
        cls.columns = inspect.getmembers(cls, lambda o: isinstance(o, Column)) 
        cls.nb_columns = len(cls.columns)
        return cls

class Listing(object):
    __metaclass__ = ListingMeta
    mycol2 = Column()
    mycol3 = Column()
    zut = Column()
    cool = Column()
    menfin = Column()
    a = Column()

pprint.pprint(Listing.columns)
Run Code Online (Sandbox Code Playgroud)

结果:

[('a', <__main__.Column object at 0xb7449d2c>),
 ('cool', <__main__.Column object at 0xb7449aac>), …
Run Code Online (Sandbox Code Playgroud)

python metaclass class

41
推荐指数
5
解决办法
1万
查看次数

标签 统计

python ×2

class ×1

introspection ×1

metaclass ×1

python-2.7 ×1