【问题标题】:How to get type of object's attribute in python如何在python中获取对象属性的类型
【发布时间】:2019-08-03 02:02:30
【问题描述】:

假设我有以下课程:

class myClass():
    def __init__(self, number):
        self.myStr = "bla"
        self.myInt = number * 3

如何获取属性类型?我的意思是我想得到以下列表:['str','int']?

我也希望它在派生类上工作。

非常感谢:)

【问题讨论】:

  • 为什么不['int', 'str']
  • Pythonic 方式是here :-)

标签: python python-2.7


【解决方案1】:

RHP 几乎拥有它。您想组合 dirtypegetattr 函数。这样的理解应该是你想要的:

o = myClass(1)
[type(getattr(o, name)).__name__ for name in dir(o) if name[:2] != '__' and name[-2:] != '__']

这将为您提供['int', 'str'](因为myInt 在字母顺序中排在myStr 之前)。

分解:

  1. getattr 查找对象的属性名称
  2. type 获取对象的类型
  3. __name__ 上的 type 给出类型的字符串名称
  4. dir 列出对象的所有属性(包括__dunder__ 属性)
  5. 理解中的if 测试过滤掉__dunder__ 属性

【讨论】:

  • 有什么简单的方法可以检查某个类是否具有某个派生对象的属性?
  • dir 列出对象的所有属性;如果对象的类继承自另一个类,则该对象的实例将具有两者的所有属性。
  • 我的解决方案有一个小问题:在某些情况下,我进入了列表 - “'instancemethod'”。
  • 这将来自具有方法作为属性的对象。方法也是对象的成员。如果type 的结果具有__call__ 属性,您可以通过拆分列表理解来过滤掉这些项目。
  • 对不起,我可能不够清楚。我想知道显示为“实例”和“实例方法”的对象类型。我猜这些是被继承的属性。这是我的第一个问题。
【解决方案2】:

使用 type() 函数。你甚至可以用它来打印出这样的变量类型:

print(type(variable_name))

【讨论】:

  • 假设你发现了这个信息。您希望它如何帮助您?您应该详细说明您真正想要做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2011-01-24
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-08-11
相关资源
最近更新 更多