python方法在类外工作,但不在类内工作
我是python新手,正在尝试理解和使用类。我有一个简单的zipcode类,它将邮政编码作为字符串并生成一个对象。但是,调用任何方法都会返回未找到的邮政编码。如果我在类块之外运行任何方法,它都可以正常工作。任何想法或想法都是值得赞赏的。顺便说一句,我正在为这个小项目使用pyzipcode库python方法在类外工作,但不在类内工作,python,class,Python,Class,我是python新手,正在尝试理解和使用类。我有一个简单的zipcode类,它将邮政编码作为字符串并生成一个对象。但是,调用任何方法都会返回未找到的邮政编码。如果我在类块之外运行任何方法,它都可以正常工作。任何想法或想法都是值得赞赏的。顺便说一句,我正在为这个小项目使用pyzipcode库 from pyzipcode import ZipCodeDatabase class zipCodeProcessor(object): def __init__(self, zipcode):
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()
缺少“self”作为第一个参数:
例如,def zipToState(self,zip):
…作为独立函数运行良好的代码不作为类的一部分运行,这一点也不奇怪。Python不是魔法。您需要修改您的方法,以避免将邮政编码作为参数。在初始化实例时,您已经将
zipcode
存储为实例的属性,因此您应该在方法中使用self.zipcode
(当然,还应该接受self
作为参数)
例如:
def zipToState(self):
zipCodeDB = ZipCodeDatabase()
zipStateQuery = zipCodeDB[self.zipcode]
return zipStateQuery.state
作为一种优化,您还应该考虑不为每个方法调用实例化新的
ZipCodeDatabase
对象。您可以创建一个实例(或每个zipCodeProcessor
实例创建一个实例),具体取决于它的重量(抱歉,不熟悉该特定模块)。zipcode是类局部变量,因此您应该声明如下方法:
def zipToState(self):
zipCodeDB = ZipCodeDatabase()
zipStateQuery = zipCodeDB[self.zipcode]
return zipStateQuery.state
您是否忘记在对象方法中添加一个
self
?这可能特别有助于类和实例变量。该链接是针对2.7.9的,我建议您查看有关如何使用类的基本教程