Python 3.x 创建一个好的类方法

Python 3.x 创建一个好的类方法,python-3.x,function,oop,while-loop,logic,Python 3.x,Function,Oop,While Loop,Logic,我构建了一个类,根据类型向用户提问 class Question: def __init__(self, subject): self.subject = subject self.question = f"Enter the {subject} to be created. You may end this by typing 'DONE':\n" self.still_needed = True def

我构建了一个类,根据类型向用户提问

class Question:

    def __init__(self, subject):
        self.subject = subject
        self.question = f"Enter the {subject} to be created. You may end this by typing 'DONE':\n"
        self.still_needed = True

    def ask_question(self):
        ans_list = []
        running = True
        while running:
            var = input(f"Enter {self.subject}?\n")
            if var.lower() == 'done':
                running = False
            else:
                ans_list.append(var)
        return ans_list
其想法是建立一个问题模型,创建项目列表

这似乎与以下主要代码配合得很好

roles=Question(subject=“role”)。询问问题()

这将从Queue类创建一个列表,并使用其方法ask question生成该列表。据我所知,对象随后被销毁,因为它没有保存到变量中


我的问题是,作为Python和OOP的新手,这似乎是一种可靠且不易混淆的方式,还是我应该使用折射器?如果是,社区有什么建议?

我的意见

我想这取决于你。首先,使用类的主要目的之一是稍后使用它创建实例。类是对象,或者我喜欢称之为“类别”,当项目中存在不同类型的实例时,可以使用它们

鉴于你的代码片段,我真的不能提出任何建议,我不知道
self.question
self.still\u needed
的用法。然而,如果我的观点仅基于这一部分:
roles=Question(subject=“role”).ask_Question()
,那么我肯定会使用函数来代替。正如你所说

据我所知,该对象随后被销毁,因为它没有保存 一个变量

替代解决方案

使用装饰器→ 带@符号的那个

在这种情况下,
@staticmethod
就是最好的选择

什么是静态方法?staticmethod装饰器是在类中创建函数的一种方法。因此,它不是一种方法,而是一种函数(没有自参数)。这也意味着静态方法绑定到类而不是对象。因此,静态方法不依赖于对象(因此,您不需要创建对象来使用它)。例如:

class SomeMathStuff():
    @staticmethod
    def AddSomeNumbers(iterable):
        return sum(iterable)
 
result = SomeMathStuff.AddSomeNumbers([1, 2, 3])
# result = 6
如您所见,我不需要创建对象,而是需要调用它的类来使用它。警告一句,大多数Python程序员认为这是一种非Python的方式,但我不会对此太担心。见鬼,我有时也会用这些方法。在我的辩护中,这是组织项目的一种好的、有效的方法。这样,您就可以全局应用类方法,并且可以将它们“分类”到您认为合适的某些类中

不管怎样,这就是我所有的!如果我以任何方式误解了你,我向你道歉

其他信息。。。以防我不是最好的老师


如果不保留对象,您需要类做什么?您使用它的目的就是调用这个对象的一个方法,就好像它是一个函数一样。所以,把它定义为一个函数。如果您保留一个或多个对象以供将来参考,则类是有意义的。