我对python 3有一点疑问。
我想创建一个类,它使用该类中的函数。就像:
class Plus:
def __init__(self, x, y):
self.x = x
self.y = y
self.test()
def test(self):
return self.x + self.y
现在我正在做类似
的事情a = Plus(5,6)
print(a)
和python给了我
<__main__.Plus object at 0x000000000295F748>
而不是我想要的11。我知道我可以通过
获得11a = Plus(5, 6).test()
print(a)
但那不是我想要的。我想调用类并获得结果而不向它添加.test()。
你能帮助我吗?
答案 0 :(得分:0)
您需要为Plus
课程定义__str__
method:
class Plus:
def __init__(self, x, y):
self.x = x
self.y = y
def test(self):
return self.x + self.y
def __str__(self):
return str(self.test())
答案 1 :(得分:0)
我会选择:
class Plus:
def __init__(self, x, y):
self.x = x
self.y = y
self.test()
def test(self):
res = self.x + self.y
self.__repr__ = lambda:str(res)
return res
>>> Plus(5,5)
10
>>> a = Plus(5,5)
>>> a
10
>>> a.test()
10
这样,您每次调用print时都不会重新计算总和,当您调用测试方法时,它会更新。
答案 2 :(得分:0)
现在我正在做类似
的事情
a = Plus(5,6)
print(a)
和python给了我
<__main__.Plus object at 0x000000000295F748>
而不是我想要的11。我知道我可以通过
获得11
a = Plus(5, 6).test()
print(a)
但那不是我想要的。我想调用类并获得结果而不向它添加.test()。
我不确定你的意思是什么'而不是11,因为我想要它'。如果您希望Plus(5, 6)
实际返回11
(int
实例),则应使Plus
成为返回总和的函数。或者,您可以覆盖__new__
方法并挂钩对象创建 - 但这是一个坏主意。
你想要达到什么目标?
我怀疑,通过'而不是11,因为我想要它'你想要一些特别的东西打印(格式化,代表)。如果是,请覆盖__str__
或__unicode__
或__repr__
方法。
答案 3 :(得分:-1)
编辑: 忽略这个答案,它是对问题误解的评论
这是错的。 当您实例化一个对象时,您希望获得对该对象的引用。
如果你只想要一个返回数字的全局函数,为什么还要打扰用init创建一个类呢?
在python中你不应该像C#中的静态类一样进行封装。而是将模块命名为某种东西,并将其用于封装。