好吧。所以我看到有人在用这个代码,我明白了,所以我要用它。
是否有必要使用__init__
?在
class A(object):
def __init__(self):
self.x = 'Hello'
def method_a(self, foo):
print self.x + ' ' + foo
a = A()
a.method_a('Sailor!')
我不能这样做:
^{pr2}$
当我这样做的时候,我会得到“你好,水手!”但我的下面有个“无”?这和__init__
有关吗?有人解释。在
Tags:
你的要求与
__init__
没有太大关系。你可以按照你在第二个例子中说的去做,但是它和第一个例子做的不一样。在在第一个示例中,它打印“Hello”,后跟一个传递给方法的参数。您可以通过传入其他内容使其打印除“水手”之外的其他内容:
在第二个例子中,它总是打印“你好,水手!”你不能让它打印其他东西。在
至于
^{pr2}$__init__
,在您的示例中,__init__
并没有那么有用,因为它所做的只是为每个对象设置一个属性x
,该属性对每个对象都是相同的字符串。如果要在创建每个对象时“设置”,则应使用__init__
。在您的例子中,这个设置没有那么有趣,因为对于每个对象它总是相同的。您不需要使用__init__
,但是创建没有附加某种单独状态的对象通常没有多大意义。下面是一个更具说明性的例子:然后你可以这样做:
在这里,当您创建
Greeter
时,您可以指定问候语。该问候语与对象一起存储,并在它是某人时使用。__init__
的要点是,您可以用不同的问候语制作多个问候语。在请注意,当我打电话给
greet
时,我仍然会传递问候的人。因此,问候语(在本例中是hello或howdy)是在我创建对象时设置的,但是每次我使用对象来greet
时都会重新指定要问候的人。在通常情况下,您将在代码中混合这两种情况。有些信息是“对象的一部分”,您将在
__init__
中处理它们并将它们存储在对象上。其他一些则是更具体或短暂的信息,您将把它们作为函数参数传递给您要执行的每个任务。这两者之间的平衡取决于类应该做什么,但是上面的例子应该说明它们之间的区别。在而且,这两个都与为什么你看到“没有”印刷无关。jimbob博士解释了为什么会发生这种情况。在
如果创建对象时不需要设置任何属性或进行任何其他初始化,则可以安全地省略
__init__
。得到None
的原因是你的method_a()
没有返回类型。所以当你打印它时,你得到None
。在如果你有:
您将看不到
None
(因为method_a
返回一个字符串),然后在字符串上调用print
来显示它。在或者如果你有:
^{pr2}$这次调用
method_a
将打印字符串,但是由于您没有打印这个结果(只是调用它),所以您不会看到显示None
。在相关问题 更多 >
编程相关推荐