为什么setter和getter不按预期工作?

时间:2014-10-22 22:31:13

标签: python python-2.7 setter getter

这是我关于Stackoverflow的第一个问题,这是我正在进行的一项任务。在请求你的帮助之前,我已经用尽了所有其他选择。

代码是创建一个类,该类将要求用户输入他们的宠物名称,年龄和类型,并使用访问器方法返回结果。这是我的第一个课程作业,我无法打印或返回输入。如果有人能够向我解释我的问题所在,并指出我正确的方向。我不确定我的班级是错的,领域,吸气员还是安装者。我觉得我在某个地方犯了一个简单的错误,我无法弄清楚。

这是python 2.7

#Pet class


class Pet():
    def __init__(self, name, typea, age):
        self.name = name
        self.typea = typea
        self.age = age

def main():
    pet_name =raw_input('What is your pets name? ')
    pet_typea =raw_input('What type of animal is your pet? ')
    pet_age =raw_input('What is your pets age? ')

    def __setName__(self, n):
        self.name = n
    def __getName__(self, n):
        return self.n

    def __setTypea__(self, t):
        self.typea = t
    def __getTypa__(self, t):
        return self.t

    def __setAge__(self, a):
        self.age = a
    def __getAge__(self, a):
        return self.a

main()

1 个答案:

答案 0 :(得分:0)

您似乎误解了类在Python中的工作方式。据推测,您希望__setName__方法位于class Pet范围内。 main函数不是您的类的一部分,定义函数不会影响任何事情。此外,您已多次重新定义__setName__方法。据推测,您希望将其称为__setType____setAge__,依此类推。此外,在Python中使用双下划线启动方法名称是非常不寻常的。这通常保留给__init__等特殊方法。例如,常规方法应该被称为setAge。此外,PEP-8表示方法名称不应该是驼峰式的,而是使用下划线来分隔单词。所以更多的Pythonic名称是set_name。但是,Python通常根本不使用set_*get_*方法,而是更喜欢使用properties

最后,如果您真正使用的是Python 2.7,那么您可能应该使用“新式”对象,这意味着您应该将class定义行更改为继承自object

请尝试从此处开始:

class Pet(object):
    def __init__(self, name, typea, age):
        self.name = name
        self.typea = typea
        self.age = age

    def setName(self, n):
        self.name = n
    def getName(self, n):
        return self.n

    def setType(self, t):
        self.typea = t
    def getType(self, t):
        return self.t

    def setAge(self, a):
        self.age = a
    def getAge(self, a):
        return self.a

def main():
    pet_name =raw_input('What is your pets name? ')
    pet_typea =raw_input('What type of animal is your pet? ')
    pet_age =raw_input('What is your pets age? ')