【问题标题】:Are there any caveats involved in using object.__class__ in python?在 python 中使用 object.__class__ 是否有任何注意事项?
【发布时间】:2020-01-30 03:42:32
【问题描述】:

在使用object.__class__ 时有什么注意事项吗?例如,一旦我这样做,在 Django 中:

model_object.__class__.objects.all()

我想知道这是否完全没问题。

谢谢。

【问题讨论】:

  • 如果您能确保model_object 确实是一个模型对象,那就没问题了。
  • 这取决于为什么你想做他的。 model_object.objects.all() 会以同样的方式工作,只要 model_object 没有实例属性 objects 会影响类属性。
  • @chepner 我想这样做是为了方便不必导入类。因为我已经有了对象。 model_object.field.__class__.objects.all() 其中field 是指向另一个Django 模型的foreign_key 字段。 “model_object.objects.all() 会以同样的方式工作。”好点我错过了。
  • 我认为最好导入cls而不是使用__class__
  • @WaketZheng 怎么会这样?

标签: python django python-3.x


【解决方案1】:

显式优于隐式。只需导入模型类::

from .models import ModelClass

ModelClass.objects.all()

【讨论】:

    【解决方案2】:

    不一定。 <class instance>.__class__ 是获取实例的类属性或方法的合理方式。不过,通常有一些更好的内置方式可以与 dunder 属性和方法进行交互——在您的情况下,您可以使用 type() 来访问 .__class__,例如type(model_object).objects.all().

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2010-10-27
      • 2011-10-10
      • 2012-07-09
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多