<p><a href="https://stackoverflow.com/a/32695386/2437514">answer by robert</a>可能是做你想做的事情最简单的方法。还有一个:</p>
<pre><code>class class1():
a,b = somevalues, somevalues
@staticmethod
def func1():
do something
func2(class1.a, class1.b)
class1.func1()
</code></pre>
<p>这样做有效而你的方法无效的原因与Python处理函数和类的方式有关。你知道吗</p>
<p>函数体在第一次被调用之前不会被执行。所以当你有:</p>
<pre><code>def func1():
func1.a = somevalue
</code></pre>
<p>…您无法访问<code>func1.a</code>,直到<code>func1</code>至少被调用一次,正如您已经发现的那样。你知道吗</p>
<p>但是,对于类,类的主体在编译代码时运行。所以当你这么做的时候:</p>
<pre><code>class example:
a = somevalue
</code></pre>
<p>…您可以立即访问<code>example.a</code>。你知道吗</p>
<p>编辑:</p>
<p>回答注释中的问题:如上所示,使用类本身访问<code>func1</code>、<code>a</code>或<code>b</code>(在Python中,类是对象,就像任何其他对象一样):</p>
<pre><code>class1.a
class1.func1()
</code></pre>
<p>你也可以为自己创造一条捷径:</p>
<pre><code>func1 = class1.func1
func1()
</code></pre>
<p>另一种方法是制作<code>a</code>和<code>b</code>的不同版本的实例属性,而不是类属性。你知道吗</p>
<pre><code>class class1:
def __init__(self, a, b):
self.a, self.b = a, b
@staticmethod
def func1():
dosomething
obj1 = class1(somevalue1A, somevalue1B)
obj2 = class1(somevalue2A, somevalue2B)
func2(obj1.a, obj1.b)
func2(obj2.a, obj2.b)
obj1.func1()
obj2.func1()
class1.func1()
</code></pre>
<p>最后三行都调用相同的函数,因为<code>obj1.func1</code>、<code>obj2.func1</code>和<code>class1.func1</code>都指向<code>class1</code>的相同方法。请注意,可以从类(<code>class1</code>)和类的实例(<code>obj1</code>,<code>obj2</code>)调用<code>func1</code>的原因是<code>func1</code>是一个静态方法。你知道吗</p>