[英]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.