繁体   English   中英

在python中打印对象的实例

[英]print instance of object in python

我是一名初学者。 为什么此代码不能打印100?

class Pet(object):

    def __init__(self):
        self.name = ''
        self.age = 0

    def getName(self, newname):
        self.name = newname
        return self.name

    def getAge(self, aging):
        self.age += aging
        return self.age


polly = Pet()
polly.getAge(100)
print polly.getAge

1)您的意思是print polly.getAge()而不是print polly.getAge

2)但是,您还有第二个问题( getAge()要求aging是强制性的,完全不应该这样做)。 您可以使用print polly.getAge(0)解决这个问题,或者对其进行正确修复,请参见下文。

返回1)前者实际上调用了函数/方法(除了2的问题,它尝试调用它))后者是错误的,它仅打印有关实际函数/方法的信息,而实际上不调用它。

您可以通过查看type(polly.getAge()) (或type(polly.getAge(0)) )是一个int,不同于type(polly.getAge) ,后者将是函数/方法的某种类型。

2) 您的第二个问题是getAge(...)假装是一个getter函数,但它也具有强制性参数aging并正在实现老化,这被视为“方法滥用”,并且违反了关注点分离,或者至少不要将其命名为getX ,它实际上是为吸气剂保留的。 您可以选择以下方法:a)给它一个默认的getAge(self, aging=0) (或使用@property装饰器),现在当调用getAge()时,它的行为就像一个吸气剂。 或b)将两个单独的功能重构为单独的方法(“关注点分离”):

class Pet(object):
    ...
    def getAge(self, aging):
        return self.age

    def doAging(self, aging):
        self.age += aging
        # Note that doAging() has no return value, and that is correct behavior (it's a method, not a getter)

总的来说,这是一个更好,更易于维护的设计,出于种种原因,我们不赞成带有副作用的“神奇的吸气剂/设置器”(其中之一就是进行单元测试)。 当您开始添加更多方法时,您会很快知道为什么...

逐步执行。

polly = Pet()  # initialize a new Pet
polly.getAge(100)  # add 100 to polly.age
print polly.getAge   # print the getAge method bound to polly

您是否有意去做

polly = Pet()
polly.getAge(100)
print polly.age 

要么:

polly = Pet()
print polly.getAge(100) 

不管怎样,您都应该很好,并且不要使用getX方法来突变值。 这绝对是意外行为。

确实,您应该有一种设置和获取年龄的方法。

class Pet(object):

    def __init__(self):
        self.name = ''
        self.age = 0

    def getName(self, newname):
        self.name = newname
        return self.name

    def getAge(self):
        return self.age

    def setAge(self, newage):
        self.age = newage
        return None

polly = Pet()
polly.setAge(100)
print (polly.getAge())

这是修改后的代码。 我希望这能帮到您。

class Pet:

##    def __init__(self):
##        self.name = ''
##        self.age = 0

    def setAge(self, age):
        self.age = age
        #return self.age

    def getAge(self):
##        self.age = aging
##        return self.age
        print self.age


polly = Pet()
polly.setAge(100)
polly.getAge()
#print (polly.getAge)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM