python方法在Class之外工作,但不在Class中

时间:2015-02-20 23:14:44

标签: python class

我是python的新手并尝试理解和使用类。我有一个简单的zipcode类,它将一个邮政编码作为字符串并创建一个对象。但是,调用任何方法始终返回找不到的邮政编码。如果我在类块之外运行任何方法,它可以正常工作。任何想法或想法都表示赞赏。顺便说一句,我正在为这个小项目使用pyzipcode库。

from pyzipcode import ZipCodeDatabase

class zipCodeProcessor(object):

    def __init__(self, zipcode):
        self.zipcode = zipcode

    #method to extract the Timezone from a given zip code
    def zipToTimezone(zip):
        zipCodeDB = ZipCodeDatabase()
        zipTimezoneQuery = zipCodeDB[zip]
        return zipTimezoneQuery.timezone

    #method to extract the city from a given zip code using pyzipcode
    def zipToCity(zipcode):
        zipCodeDB = ZipCodeDatabase()
        zipCityQuery = zipCodeDB[zipcode]
        return zipCityQuery.city

    #method to extract the state from a given zip code using pyzipcode
    def zipToState(zip):
        zipCodeDB = ZipCodeDatabase()
        zipStateQuery = zipCodeDB[zip]
        return zipStateQuery.state

zipObject = zipCodeProcessor('10005')
zipObject.zipToState()

3 个答案:

答案 0 :(得分:1)

毫无疑问,作为独立功能运行良好的代码不能作为课程的一部分工作。 Python并不神奇。您需要修改方法,不要将邮政编码作为参数。在初始化实例时,您已将zipcode存储为实例,因此您应该在方法中使用self.zipcode(当然,接受self作为参数)。

例如:

def zipToState(self):
    zipCodeDB = ZipCodeDatabase()
    zipStateQuery = zipCodeDB[self.zipcode]
    return zipStateQuery.state

作为优化,您还应该考虑不为每个方法调用实例化一个新的ZipCodeDatabase对象。您可以改为创建单个实例(或每个zipCodeProcessor实例的实例),具体取决于它的重量级(不熟悉该特定模块,抱歉)。

答案 1 :(得分:0)

缺少"自我"作为第一个论点:

例如,def zipToState(self,zip): ...

答案 2 :(得分:0)

zipcode是类本地变量,所以你应该声明这样的方法:

def zipToState(self):
    zipCodeDB = ZipCodeDatabase()
    zipStateQuery = zipCodeDB[self.zipcode]
    return zipStateQuery.state