类函数返回不同的结果

时间:2020-05-20 12:55:27

标签: python class output

我有2种不同的方式来设置python类。一种自动运行class函数,另一种需要手动运行。

手动运行功能:

> dat1
  Loc Region Region2 ID        var1        var2
1   NY      a      Pi  1  0.61701016  0.06120094
2   NY      a      Pi  1 -0.44713950 -0.25283486
3   NY      a      Pi  1  0.15848100  1.00864335
4   NY      a      Pi  1 -0.51399894 -0.65522884
5   NY      a      Pi  1 -1.12276336  2.63413137
6   NY      a      Pi  2 -0.44713902 -0.30533290
7   NY      a      Pi  2 -2.11185370  0.09849320
8   NY      a      Pi  2 -0.72809863 -0.68920879
9   NY      a      Pi  2 -0.24670036  0.31428066
10  NY      a      Pi  2 -0.61361568  0.92017453
11  MA      b      La  3  0.10394785 -1.51214696
12  MA      b      La  3 -0.80057855 -0.01470235
13  MA      b      La  3  1.32370390  0.60565166
14  MA      b      La  3  0.03116408 -1.01688085
15  MA      b      La  3 -0.82361367  1.11563956
16  MA      b      La  4 -0.86675173 -0.26016376
17  MA      b      La  4 -1.25258158  1.03647590
… 

这将显示“ 12”

自动运行该功能:

pSinkWriter->WriteSample(streamIndex, spSample));

这将打印“ << strong>主要 .testclass对象,位于0x011C72B0>”

我如何自动运行class函数,但仍获得12作为打印输出?

4 个答案:

答案 0 :(得分:1)

在您的自动示例中,您未在调用“ theClass”。任何函数调用都需要()。 您可以将自动validator重命名为__call__,并将其命名为theClass()

https://www.journaldev.com/22761/python-callable-call上查看更多信息

答案 1 :(得分:1)

在第二个版本中,您正在validator中调用__init__函数,但不返回validator返回的值。问题是__init__除了None之外什么都不能返回。您可以做的就是将值分配给实例变量:

class testclass:
  value = 0
  def __init__(self, value):
      self.value = value
      self.value = self.validator()

  def validator(self):
      data = self.value[0] + self.value[1]
      data = int(data)
      return data
theClass = testclass('123456')
print(theClass.value)

输出:

12

答案 2 :(得分:0)

如果只想打印输出值,而不是将其用作变量,则可以将__str__定义为类的一部分。

class testclass(object):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return self.validator()

    def validator(self):
        data = self.value[0] + self.value[1]
        data = int(data)
        return data

>>> theClass = testclass('123456')
>>> print(theClass)
12

如果您想将其用作变量,例如theClass + 5,那么在这种情况下,使用自定义类是不可行的。

答案 3 :(得分:0)

validator函数内部打印:

class TestClass:  # sticking to more Pythonic naming conventions
    def __init__(self, value):
        self.value = value
        self.validator()

    def validator(self):
        print(int(self.value[0] + self.value[1]))

每创建一个实例,这将自动打印验证输出:

>>> the_class = TestClass('123456')
12