我写了以下代码:
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
)而不调用将它分配给变量?
答案 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