<ol>
<li>类中的每个方法(static/class除外,它是特殊的)都必须包含第一个参数-<code>self</code>。所以你应该写:</li>
</ol>
<p><code>def main_page(self, main_1):</code></p>
<ol start=“2”>
<li>在<code>main_page()</code>中不使用<code>main_1</code>,因此可以删除此参数。所以你的函数看起来像:</li>
</ol>
<p><code>def main_page(self):</code></p>
<ol start=“3”>
<li>对用户输入使用递归是一个非常糟糕的主意。而不是:</li>
</ol>
<pre><code> while choice not in allchoice:
print("Invalid Please try again")
main_page()
</code></pre>
<p>我建议你写:</p>
<pre><code> while choice not in allchoice:
print("Invalid Please try again")
choice = input()
</code></pre>
<p>它也解决了你的问题。您试图将<code>main_page()</code>称为:</p>
<p><code>main_page()</code></p>
<p>但另一类方法中的类方法的调用方式如下:</p>
<p><code>self.main_page()</code></p>
<p>所以最后的代码是:</p>
<pre><code>class Main:
def main_page(self):
print("===== | MAIN MENU |=====")
print("|| ||")
print("========================")
print("1 - STUDENT ")
print("2 - SUBJECT ")
print("3 - QUIT ")
allchoice = ['1', '2', '3'];
choice = input()
while choice not in allchoice:
print("Invalid Please try again")
choice = input()
if choice == '1':
print("Hello world")
elif choice == '2':
print("back world")
else:
quit()
mainout = Main()
mainout.main_page()
</code></pre>