Python 3: 在__init__中调用类函数

1 投票
4 回答
7784 浏览
提问于 2025-05-10 15:19

我有一个关于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。我知道我可以通过下面的方式得到11:

a = Plus(5, 6).test()
print(a)

但这不是我想要的。我希望调用这个类的时候,直接得到结果,而不需要加上.test()。

你能帮我吗?

相关问题:

  • 暂无相关问题
暂无标签

4 个回答

-1

编辑:
忽略这个回答,它是对问题误解的评论。

这完全是错误的。
当你创建一个对象时,你应该能得到那个对象的引用。

如果你只是想要一个全局函数返回一个数字,那为什么还要费劲去创建一个带初始化方法的类呢?

在Python中,你不应该像在C#中那样想要静态类来实现封装。相反,给模块起个名字,然后用它来实现封装。

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(一个整数),你应该把Plus做成一个返回和的函数。或者你可以重写__new__方法,在对象创建时进行处理——但这样做并不好。

你想要实现什么呢?

我怀疑你说的“而不是我想要的11”是不是想要某种特别的输出(格式化的,表示的)。如果是这样的话,可以重写__str____unicode____repr__方法。

1

我建议这样做:

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

这样的话,每次你调用打印的时候就不用重新计算总和了,而是在你调用测试方法的时候更新总和。

0

你需要为你的 Plus 类定义一个 __str__ 方法

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())

撰写回答