【问题标题】:How to define class variables using the functions and variables of an instance in Python如何在 Python 中使用实例的函数和变量来定义类变量
【发布时间】:2026-01-21 14:40:01
【问题描述】:

有没有办法使用实例的变量和函数来定义类变量?谢谢

简化后的代码如下所示:

def ClassA():
    X = self.func(self.a)

    def __init__(self, avalue):
        self.a = avalue

    def func(self):
        return self.a + 5

NameError: name 'self' 未定义

【问题讨论】:

  • 你不能这样做,因为类必须在类实例之前存在。
  • 您可以从实例中设置类变量,是的。在您拥有实例之前,您无法访问任何实例变量。也许您误解了实例到底是什么……?

标签: python class scope


【解决方案1】:

首先,您使用class 定义一个类,而不是def

self 只需要在类的函数定义中使用,因为它们会改变作用域。在他们之外你不需要它: x = func(a).

但是您的代码无论如何都不会工作,因为该实例还不存在。

【讨论】:

    【解决方案2】:

    我猜你试图做的是:

    class ClassA():
        def __init__(self,avalue):
            self.a = avalue
            self.X = self.func
    
        def func(self):
            return self.a + 5
    
    b = ClassA(43)
    b.X()
    

    输出

    48
    

    【讨论】:

      【解决方案3】:
      class A():
          def __init__(self):
              self.y = 0
      
          def m(self):
              A.x = 1
      
      b = A()
      #print(b.x) doesn't work here since we haven't made it yet. 
      b.m() 
      print(b.x) #1
      c = A()
      print(c.x) #1
      A.x = 2
      print(c.x) #2
      print(b.x) #2 
      print(vars(A)) #{'__dict__': <attribute '__dict__' of 'A' objects>, '__module__': 'builtins', 'x': 2, '__init__': <function A.__init__ at 0x7f15f800d730>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, 'm': <function A.m at 0x7f15f800d7b8>}
      

      你会寻找这样的东西吗?

      【讨论】:

        最近更新 更多