【问题标题】:Get an attribute's class from its name in Python?从 Python 中的名称获取属性的类?
【发布时间】:2014-06-11 01:28:31
【问题描述】:

如何在 Python 中获取类属性的类型,就像在 Java 中使用此代码一样?

Field f = ClassName.class.getDeclaredField("attr_name");
Class<?> ftype = f.getType();

c = ClassName()
c.__dict__

我可以获取所有属性的名称和值,但不能获取它们的类型。

更具体地说,使用 Django,如果我有两个类,比如 Poll 和 Choice,定义如下

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

我如何知道一个类是否有 models.ForeignKey 作为属性的类型以及它指向哪个其他类?

我需要像这样的输出:

# attribute poll in class Choice is a ForeignKey type
# and it points to Poll model
Choice.poll -> Poll

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    要获取相关模型的类名,请使用rel.to

    print Choice.poll.field.rel.to.__name__   # prints 'Poll'
    

    或者,这样:

    field = Choice._meta.get_field_by_name('poll')[0]
    print field.rel.to.__name__  # prints 'Poll'
    

    另见:

    【讨论】:

      【解决方案2】:

      要在 Python 中获取对象的类型,请使用 type。从那里,您可以使用__name__ 将类的名称作为字符串获取:

      >>> class MyClass(object):
      ...     pass
      ...
      >>> obj = MyClass()
      >>> type(obj)
      <class '__main__.MyClass'>
      >>> type(obj).__name__
      'MyClass'
      

      【讨论】:

      • 可能还会添加type(obj).__name__ 将呈现其名称。
      猜你喜欢
      • 2012-01-08
      • 2021-12-04
      • 1970-01-01
      • 2018-11-16
      • 2011-02-15
      • 1970-01-01
      • 2010-09-14
      • 2014-06-27
      • 2010-10-14
      相关资源
      最近更新 更多