如何防止我的代码创建'nonetype'变量

时间:2017-04-11 13:35:08

标签: python

这些是与我的问题相关的代码:(编辑完整的代码,我为任何引起的混乱道歉)

class House:
def __init__(self, location, price, housetype, sqft):
    self.location = str(location)
    self.price = float(price)
    self.housetype = str(housetype)
    self.sqft = int(sqft)

    if self.price < 0 or self.sqft < 100:
        print("Input a valid value.")

def getLocation(self):
    return self.location

def getPrice(self):
    return self.price

def getHousetype(self):
    return self.housetype

def getSqft(self):
    return self.sqft

def setLocation(self, newLocation):
    self.location = newLocation

def setPrice(self, newPrice):
    if newPrice > 0:
        self.price = newPrice
    else:
        print("Input a valid value.")

def setHousetype(self, newHousetype):
    self.housetype = newHousetype

def setSqft(self, newSqft):
    if newSqft > 100:
        self.sqft = newSqft
    else:
        print("Input a valid value.")

def tax(self, no_years):
    if self.getHousetype == 'Apartment':
        return self.price * (0.025 * no_years)
    elif self.getHousetype == 'Bungalow':
        return self.price * (0.035 * no_years)
    elif self.getHousetype == 'Condominium':
        return self.price * (0.045 * no_years)
    else:
        print("Invalid data.")

def __eq__ (self, other):
    if self.getHousetype() == other.getHousetype():
        return 'true'
    else:
        return 'false'

def __lt__ (self, no_years, other):
    if self.tax(no_years) < other.tax(no_years):
        return 'true'

我根据我的格式创建了两个房屋变量,但是当我运行house1.__lt__(5, house2)时,它给了我错误:

  

'&LT;' “NoneType”和“NoneType”的实例之间不支持。

我已经尝试了各种方法来解决这个问题大约一个小时,但我真的很新的python,不知道如何阻止我的代码获取这些'NoneType'值,我也不能更改它们为我的方法__lt__的代码的整数。有人能告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

self.getHousetype本身就是一个方法对象,因此self.getHousetype == 'Apartment'始终为false。您需要调用该方法,即self.getHousetype() == 'Apartment'。由于此时您的所有条件都是假的,因此您的返回语句都不会发生,并且函数会以返回默认值None结束。

但正如cricket_007指出的那样,python不需要getter方法,所以只做self.housetype == 'Apartment'

self.housetype