首页 > 解决方案 > 没有 __init__ 的类中的类变量赋值

问题描述

考虑以下:

from module1 import foo_ext()

    class A(object):
        x = foo_ext()
        @classMethod
        def foo1():
          . . .
        @classMethod
        def foo2():
          . . .
        @classMethod
        def foo3():
          . . .

是不是每次我们调用A.foo1()A.foo2() x类变量都没有通过调用再次分配foo_ext(),只有在第一次调用“静态类”时才调用A它的一些类方法:foo1foo2等等?

标签: pythonpython-3.xclass-variables

解决方案


是否每次我们调用 A.foo1() 或 A.foo2() x 类变量都不会通过调用 foo_ext() 再次分配

是的,当然为什么?

仅在第一次调用“静态类”A 及其一些类方法:foo1、foo2 等?

甚至不。该语句 - 与块顶层的所有语句一样class- 被评估为class语句执行的一部分,即 - 假设最常见的情况是class模块顶层的语句(=> 不在函数内) - 首次为给定进程导入模块时。

这个:

class Foo(object):
   x = somefunc()

   def bar(self):
       print("foo")

   @staticmethod
   def baaz():
       print("quux")

实际上只是语法糖:

x = somefunc()

def bar(self):
  print("foo")

def baaz():
   print("quux")

attribs = {
    "x" : x,
    "bar": bar,
    "baaz": staticmethod(baaz)
    }

del x
del bar
del baaz

Foo = type("Foo", (object,), attribs)

那么为什么您希望x = somefunc()每次实例化Foo或调用时都会执行该语句baror baaz


推荐阅读