从Python中的名称获取属性的类?

时间:2014-06-11 01:28:32

标签: python django django-models

如何在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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

要获取相关模型的类名,请使用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'

另见: