使用类而不是列表python

使用类而不是列表python,python,class,Python,Class,我有以下代码: #!/usr/bin/python # -*- coding: utf-8 -*- import sys import re companies = {} for line in open('/home/ibrahim/Desktop/Test.list'): company, founding_year, number_of_employee = line.split(',') number, name = company.split(")") co

我有以下代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys import re

companies = {}
for line in open('/home/ibrahim/Desktop/Test.list'):
    company, founding_year, number_of_employee = line.split(',')
    number, name = company.split(")")
    companies[name] = [name, founding_year, number_of_employee]
    print "Company: %s" % company

CompanyIndex = raw_input('\n<Choose a company you want to know more about.>\n\n<Insert a companyspecific-number and press "Enter" .>\n')

if CompanyIndex in companies:
    name, founding_year, number_of_employee = companies[CompanyIndex]
    print 'The companys name is: ',name,'\nThe founding year is: ', founding_year,'\nThe amount of employees is: ', number_of_employee
else:
    print"Your input is wrong."
我的目标是获得一个类,在那里我可以保存有关公司名称、成立年份和员工人数的信息,而不是使用包含列表的词典

我读了好几本教程,但我真的不知道怎么做。它确实混淆了这个“自我”是什么,它是
\uuuuu init\uuuuu
\uuu del\uuuuu
所做的,等等。我该怎么做呢?

您可以做:

class Company(object):

    def __init__(self, name, founding_year, number_of_employee):
        self.name = name
        self.founding_year = founding_year
        self.number_of_employee = number_of_employee
之后,您可以通过编写
Company=Company('Chef',1956,10)
来创建
Company
对象

然后,您可以创建该类的实例,并使用get方法获取数据:

my_company = Company('Microsoft', 1964, 30000)
print my_company.get_name() + ' was funded in ' + str(my_company.get_year_of_funding()) + ' and has ' + str(my_company.get_num_of_employees()) + ' employees'
# OUTPUT: Microsoft was funded in 1964 and has 30000 employees

下面是一个如何创建
CompanyInfo
类的示例

class CompanyInfo(object):
    def __init__(self, name, founded_yr, empl_count):
        self.name = name
        self.founded_yr = founded_yr
        self.empl_count = empl_count

    def __str__(self):
        return 'Name: {}, Founded: {}, Employee Count: {}'.format(self.name, self.founded_yr, self.empl_count)
下面是一个如何创建它的示例:

# ...
for line in open('/home/ibrahim/Desktop/Test.list'):
    company, founding_year, number_of_employee = line.split(',')
    comp_info = CompanyInfo(company, founding_year, number_of_employee)
下面是一个您可以如何使用它的示例:

print "The company's info is:", str(comp_info)

. 应该会有帮助的,耶!我和你做的一模一样!但后来我添加了一些东西,认为它不起作用:P我只是不知道如何定义一个方法,从文本中读取信息并将其保存在这些变量中,就像我在列表示例中所做的那样:/Thanky your your response!:)但我只是不知道你是如何从我当时写的文本中获得信息的——我从文本数据中获得信息,这就是我使用拆分方法的原因,因此微软在1964年没有得到资助。FYII否决这一点,因为getter的无用使用。只需直接使用属性即可。如果您需要getter,您可以使用属性装饰器透明地交换它们:@MartinThurau我不同意。如果以后他决定使用属性的所有实例都需要事先进行一些转换怎么办?@Ethan然后用属性替换属性。与其他一些语言不同,它不会以任何方式更改访问属性的代码。看起来也很酷,也很有意义^^^但似乎我没有你们拥有的一些信息:P因为我真的不知道你们是如何包含我从文本文件中获取信息的:/你们的类的范围可以是你们想要的任何内容,从你们的问题是您希望它包含“文件解析行为”。这甚至不是100%清楚,这是你想要从这个评论,真的。因此,如果你想要一个类从一个类似文件的对象推断出它的身份,
\uuu init\uuu()
方法可能会有所不同。很抱歉,我没有把我的问题写得这么清楚:/我来自德国,我的英语不是最好的,所以有时我不知道如何确切地说出我真正想说的话,soz:Scool你为我编辑了它:D它工作到一定的限度,它只显示我上一个公司和它的信息-当它说打印“公司的信息是:”,str(comp_info)时,它只显示园丁如何让程序显示每个公司的名称,用户可以选择一家他想了解更多信息的公司?我想你的问题再次强调了范围的重要性。我们使用的隐喻是“
CompanyInfo
”,因此它可能只知道一家公司,而且只知道一家公司。但是,如果您想创建一个行为类似于列表的对象,但在
CompanyInfo
s方面有一些特殊行为,那么我们也来谈谈
CompanyList
CompanySet
。在这种情况下,您可能希望从
列表
继承。
# ...
for line in open('/home/ibrahim/Desktop/Test.list'):
    company, founding_year, number_of_employee = line.split(',')
    comp_info = CompanyInfo(company, founding_year, number_of_employee)
print "The company's info is:", str(comp_info)
class companies(object):
    def __init__(self,text_name):
        text_file = open(text_name,'r')
        companies = {}
        all_text = text_file.read()
        line = all_text.split('\n')  #line is a list
        for element in line:
            name,year,number = element.split(',')
            companies[name] = [year,number]
        self.companies = companies

    def get_information(self,index):
        print self.companies[index]

 #an instance of the class defined above
my_company = companies(r'company.txt')
 #call function of my_company
my_company.get_information(r'Gardener')