我是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()
答案 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