我接受了一个Java类并试图将其转换为python,我做错了什么?

我接受了一个Java类并试图将其转换为python,我做错了什么?,python,class,Python,Class,我真的不知道我在做什么,我写的唯一成功的类是Java。我似乎无法让这个代码正常工作。它不断地给我“小盒子没有定义”以及“星星条纹=星星条纹()”,并且对第二次回溯没有解释 class StarsAndStripes(): def __init__(self): self.small_box = small_box() self.big_box = big_box() def twenty_stars(): for i i

我真的不知道我在做什么,我写的唯一成功的类是Java。我似乎无法让这个代码正常工作。它不断地给我“小盒子没有定义”以及“星星条纹=星星条纹()”,并且对第二次回溯没有解释

    class StarsAndStripes():

    def __init__(self):
        self.small_box = small_box()
        self.big_box = big_box()

    def twenty_stars():
        for i in range(20):
            print("*")
        print("\n")

    def twenty_dashes():
        for i in range(20):
            print("-")
        print("\n")

    def small_box():
        for i in range(3):
            print(twenty_dashes)
            print(twenty_stars)
        print(twenty_dashes)

    def big_box():
        print(small_box)
        print(small_box)

stars_stripes = StarsAndStripes()
print(stars_stripes.small_box)
print("\n\n")
print(stars_stripes.big_box)
结果应该如下所示:

--------------------
********************
--------------------
********************
--------------------
********************
--------------------


--------------------
********************
--------------------
********************
--------------------
********************
--------------------
--------------------
********************
--------------------
********************
--------------------
********************
--------------------

我认为问题出在你的
\uuuu init\uuu
方法中。您正试图调用一个
小\u box
(非类成员)函数,但该函数不存在。尝试删除整个
\uuuu init\uuuu
方法,我认为您不需要它。

您忘记引用该类的实例。这是使用python中的
self
作为方法的第一个参数来完成的

另外,您不必打印方法调用的结果,因为它们实际上已经打印到输出(我已经更改了方法的主体)

而且您不需要在
\uuuu init\uuu
函数中调用类的方法

class StarsAndStripes():
定义初始化(自):
通过
def二十颗星(自身):
对于范围(20)内的i:
打印(“*”)
打印(“\n”)
def二十_破折号(自身):
对于范围(20)内的i:
打印(“-”)
打印(“\n”)
def小型_盒(自身):
对于范围(3)中的i:
self.two_破折号()
赛尔夫。二十颗星()
self.two_破折号()
def big_box():
self.small_box()
self.small_box()
星条旗
星条旗。小盒子()
打印(“\n\n”)
星条旗。大盒子()

所有这些变量都没有在任何地方定义。看起来您需要阅读Python类定义的基础知识。注意,这里从不使用任何内部状态,因此我可能不会首先将其作为类编写,只编写模块级函数。提示:a)需要执行self.small\u box()从类中的另一个函数调用small\u box。B) 您需要将self放入类C的所有函数中)您需要使用()调用函数您不能使用与实例方法同名的实例属性。这两个都是通过
self.small_box
访问的;一个将覆盖另一个。此外,如果出于某种原因确实希望使用类方法作为属性,可以通过
@property
装饰器来实现。