【问题标题】:Referencing a method while setting class attributes在设置类属性时引用方法
【发布时间】:2013-05-31 21:05:03
【问题描述】:
class Something(object):
    our_random = Something.random_thing

    @staticmethod
    def random_thing():
         return 4

当然,这不起作用,因为当我尝试调用它的方法时,Something 不存在。这也不是:

class Something(object):
    our_random = random_thing

    @staticmethod
    def random_thing():
         return 4

我已经“解决”了这个问题,只需将 random_thing() 的定义放在类上方,但我觉得这很混乱。

【问题讨论】:

  • 你的意思是打电话给random_thing吗?

标签: python class static-methods


【解决方案1】:

然后在 .__init__() 初始化器中调用它:

class Something(object):
    def __init__(self):
        self.our_random = Something.random_thing()

或者在你定义它之后调用静态方法,但仍在定义类;因为它是一个静态方法,你必须通过__func__ 属性来访问它:

class Something(object):
    @staticmethod
    def random_thing():
        return 4

    our_random = random_thing.__func__()

如果您不想调用它,只需创建一个具有不同名称的方法的副本,只需在定义它之后执行此操作:

class Something(object):
    @staticmethod
    def random_thing():
        return 4

    our_random = random_thing   # our_random as an alias for random_thing

类体作为函数执行,函数的本地命名空间形成类属性。所以,就像函数一样,如果你想引用其他对象,你需要确保首先定义它们。

【讨论】:

    【解决方案2】:
    class Something(object):
        @staticmethod
        def random_thing():
             return 4
    
        our_random = random_thing
    

    类定义创建了一个命名空间,因此您可以在类体内引用其他名称(类属性),而无需通过类访问它们。

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2013-10-30
      • 1970-01-01
      • 2018-09-29
      • 2019-09-15
      相关资源
      最近更新 更多