繁体   English   中英

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

[英]Get an attribute's class from its name in Python?

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

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

c = ClassName()
c.__dict__

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

更具体地说,如果我有两个类,例如轮询和选择,则使用Django,定义如下

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中对象的类型,请使用type 从那里,您可以使用__name__作为字符串获取类的名称:

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

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

另请参阅:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM