不确定什么/什么不放在Python的类中

时间:2014-02-18 00:04:02

标签: python oop

我是Python和编程的新手。假设我有一个文本文件,其中包含一堆人名,他们写过的文章以及他们分配的ID。我创建了一个具有这些属性的类,并将该文本文件放在该类中。没问题。现在,提示用户从该文本文件输入某人的姓名,并打印该人的所有文章。我的问题是:我是否通过在类中创建一个新函数来做到这一点?或者我是否在课外创建它?

当我不打算上课的时候,我很难缠头。我想我得到一个类定义对象的属性。但是,当我向类中添加一个对象时,我发现很难在类之外引用该对象。比如,当要求用户输入名称并将其与对象进行比较时。

我知道这不是最大的问题,我相信有些人会骂我发帖。我只是没有选择,我迫切需要帮助。我正在读书,做在线教程,看视频,而且它不是应该点击它。我理解这是否会被删除。

AHA!谢谢大家的回复!我能够在类之外设置函数,并将输入变量与该类中的author属性和KA-BLAMO进行比较!它打印正确!我还有很多需要学习的东西,但是这样的时刻让我变成了一个头晕眼花的小女孩。非常感谢你的帮助和非常好!

2 个答案:

答案 0 :(得分:1)

类是经典面向对象编程的关键,因为类定义了对象的数据和行为。在您的情况下,您应该问自己,班级是否适合打印该人的所有文章。但是你没有提供足够的关于你班级的信息,让我直接对此发表意见。表示作者的类可能如下所示:

class Author:
    def __init__(self, name, articles):
        self.name = name
        self.articles = articles

但是这个类并不知道不止一个作者,所以它有一个方法来搜索作者列表是没有意义的。但是,定义另一个类来表示作者集合是否有意义?你比我更了解你的要求,但我不这么认为。 Python在内部完成了很好的集合。

最终,我的建议是创建对象(通过类)来模拟您尝试在代码中表示的真实世界。它们应该具有在该模型的上下文中有意义的数据和行为(读取:属性和方法)。你很幸运,Python没有强制执行严格的一切都是OOP的hobgoblin,并且让你在创建自己的“作者集合”类时编写模块级函数对于你的需求来说太麻烦了:

authors = [Author(name, articles) for name, articles in input_data]
def articles_by_author(author_name):
    global authors
    for auth in authors:
        if author_name == auth.name:
            return auth.articles

答案 1 :(得分:0)

将一个类视为代码中的蓝图。你知道大工厂如何一次又一次地制造一个物体吗?他们创造了该对象的蓝图。添加了蓝图所需的所有组件,如它应该做什么,它将如何响应某些事件。

当你创建你的类时,你在那里创建将执行任务的函数,有时返回一个值甚至另一个对象!你在那个类中做了所有事情,它的美妙之处在于你可以创建该类的对象并且它将携带所有的函数和属性,你可以从这个类型的新对象中访问它们。您创建的每个附加对象都是唯一的,可以与其他对象分开。

这是非常基础的。我非常乐意为您提供帮助。抱歉没有深入。我用手机写的这个:)