在对象的新实例上调用方法而不将其分配给变量

时间:2013-10-11 17:12:26

标签: python

我写了以下代码:

import random
class Point(object):    
    x = 0.0    
    def __init__(self, x): self.x = x            
    def shuffle(self): self.x = random.uniform(0.0, 1.0)

a = Point(0.0).shuffle()
print('a', a)

b = Point(0.0)
b.shuffle()
print('b', b)

它返回:

('a', None)
('b', <__main__.Point object at 0x00000000024FB710>)

a出了点问题:如何在对象(shuffle())的新实例(a)上调用方法(此处Point)而不调用将它分配给变量?

3 个答案:

答案 0 :(得分:3)

打印None因为shuffle没有返回任何内容。在Python中,默认情况下,不返回任何内容的函数返回None。此外,通过做:

print a

你告诉Python打印调用shuffle方法的返回值。

要解决此问题,请shuffle返回一些内容(在这种情况下,我认为您希望返回self)。

另外,只是一个提示:根据您的print语法判断,您使用的是Python 3.x.在Python 3.x.中,不需要从object继承类。你只在Python 2.x中做到了。使类成为“新式”类。但是,在Python 3.x.中,所有类都是“新风格”。

答案 1 :(得分:1)

只需从self方法返回shuffle

import random
class Point(object):    
    x = 0.0    
    def __init__(self, x): self.x = x            
    def shuffle(self): 
        self.x = random.uniform(0.0, 1.0)
        return self

a = Point(0.0).shuffle()
print('a', a) #prints ('a', <__main__.Point object at 0x612850>)

答案 2 :(得分:1)

您要将shuffle的调用结果分配给a

shuffle会在您编写的代码中返回None

取而代之的是:

def shuffle(self): 
    self.x = random.uniform(0.0, 1.0)
    return self