【问题标题】:Assigning a class to a variable将类分配给变量
【发布时间】:2015-09-30 21:09:34
【问题描述】:
class SimpleTestCase(object):

    def __init__(self, name):
        self.name = name
        self.SP = SP

    def __somemethod(self):
     # do something

class Test(object):
    def __init__(self, name ):
        self.name = name
        self.case = SimpleWidgetTestCase

有什么理由这样做

self.case = SimpleTestCase

而不是

simple_obj = SimpleTestCase("name")

通过创建对象可以访问类方法和变量。前者等同于后者吗?

【问题讨论】:

  • 目前还不清楚您认为simple_obj = SimpleTestCase() 会如何取代self.case = SimpleWidgetTestCase。 Python 中的类与几乎所有其他东西一样,是一流的对象,它们可以像其他任何东西一样被传递并分配给名称/属性。
  • 它们不是等价的......有时一个类可能需要某些条件才能被实例化,这些条件可能要到程序执行的后期才会出现
  • 您定义了一个接受参数的__init__,但在调用SimpleTestCase() 时没有提供任何参数。

标签: python class oop object


【解决方案1】:

有什么理由吗
self.case = SimpleTestCase

是的,这是有原因的。有时人们想在不创建实例的情况下存储类型。 创建实例可能会很昂贵,例如 __init__ 会执行诸如打开数据库连接、读取大文件等操作。

通过创建对象可以访问类方法和变量。前者等同于后者吗?

不,前者不等于后者。 在前者中,您将类型分配给变量。在后者中,您分配一个实例。
如果方法和变量是类方法(或静态方法)或类变量,Python 允许您访问它们。这样您就不需要创建和实例化。 通过创建实例,您可以访问实例方法。

请参阅此链接了解difference between staticmethod and classmethod in python

【讨论】:

  • 这是有道理的。它可用于调用类变量和静态方法。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2012-05-07
  • 2013-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多