为什么我的Python'任务'班有用吗?

时间:2016-01-18 18:58:13

标签: python class oop

我试图学习如何使用python类来使我的代码更优雅。我编写的代码可行,但我不明白为什么类有用。我觉得我错误地使用了课程。我创建了一个类对象,里面有三个方法(createremoveupdate)。我的班级叫Task。我想使用类来调用我的函数,比如我们如何使用模块。

到目前为止,这是我的代码:

class Task(object):

    def __init__(self):
        return None

    def create(self):
        client.hr.post_job(owner,title,rate,description,private_or_not,category,sub_category,budget, skills = ['data-mining','data-scraping','google-docs','google-spreadsheet','internet-research','spreadsheets'])
        print "Job successfully created!"

    def remove(self):
        client.hr.remove_job(job_key)
    def update(self):
        client.hr.update_job(job_key)



main = Task()
main.list_jobs()

1 个答案:

答案 0 :(得分:2)

您的问题的答案相对简单:您没有在班级Task中保留任何“状态”。 Task中的每个方法都在“功能”范例中运行:即,它所操作的所有数据都直接传递给函数。在面向对象的方法中,一些数据将由类本身保存。

如果您在__init__中设置数据,或者在方法调用之间保留数据,那么使用类来构建代码库会更有意义。

使用类有一些明显的用例:例如,在使用数据库时,“数据库对象关系映射对象”通常会“记住”数据库。这样,您可以更新数据库中的信息,而无需将数据库传递给每次执行信息更新的函数。当然,这只是您可以有效使用班级数据的众多方法之一。

例如,假设我想要一名员工:

class Employee:

    def __init__(self, name: str, years_of_employment: int):
        self.name = name
        self.years_of_employment = years_of_employment

    def to_string(self) -> str:
        return "{} has worked here {} years".format(self.name, self.years_of_employment)

然后,后来:

e = Employee("Bob", 2)
print(e.to_string())  //to_string remembers the name and years of employment

如果这些概念是新概念,请阅读Object Oriented Programming。 “对象”是对象“类”的特定实例化,旨在保持“状态”并描述“行为”。因此,在上面的示例中,e是类Employee的特定实例。对象e包含描述对象name的{​​{1}}和years_of_employment的“状态”。可以轻松传递e,并且可以直接调用依赖于e的“状态”的行为:在这种情况下,e方法会在需要获取字符串时描述行为通过返回包含状态值to_string

的格式正确的字符串来表示对象e