在Python中返回类函数的结果

时间:2014-11-22 01:52:04

标签: python class

我对Python中的OOP相对较新(我主要是与Tkinter一起使用它),而且我遇到的一个问题就是烦扰我。

class test():
    def __init__(self):
        self.var1="Hello World"
        self.check()
    def check(self):
        if self.var1=="Hello World":
            return True

if test()==True:
    print("These are the same")

作为一个例子,有没有一种方法,我可以用简单的英语,将值返回两次'这样,真正的'返回的被认为是类本身的结果(不仅仅是函数),因此执行' if'声明和印刷"这些是相同的"?

提前致谢。

4 个答案:

答案 0 :(得分:2)

如果(在其他一些规则中)其类定义了一个名为__bool__的方法,则认为对象具有真值。因此,您只需将check方法重命名为__bool__,您的示例即可进行微小更改:检查if test():以确保触发此操作。请注意,这不会返回值两次,但它会检查您刚刚构造的对象的“真实性” - 相同的Python规则说明,例如,if mylist:检查mylist是否包含任何元素。

为了更好地衡量,您可能希望在检查失败时让该方法返回False - 它当前返回None。最好的方法是稍微重写一下:

def __bool__(self):
    return self.var1 == "Hello world"

答案 1 :(得分:1)

或者,您可能希望这样做:

if test().check():
    print("These are the same")

test()创建您的班级test的实例,.check()从方法True返回Falsecheck()


注意:使用 TitleCase 命名类是很常见的,最好明确地将object子类化。所以:

class test():

应该是:

class Test(object):

答案 2 :(得分:0)

不,没有办法做到这一点。您必须设置一个变量,例如self.checkTrue,然后检查test.checkTrue以查看它是否为真。例如:

class test():
    def __init__(self):
        self.var1="Hello World"
        self.check()
    def check(self):
        if self.var1=="Hello World":
            self.checkTest = True
test = test()
if test.checkTest:
    print("These are the same")
input()

另一个问题是你从来没有为对象创建一个新变量,也修复了它。

答案 3 :(得分:0)

当你调用一个类时,它是一个构造函数,所以总是返回该类的一个实例。不过,你可以给你的类另一个返回你喜欢的方法,并使用它而不是构造函数。

class Foo:
    @classmethod
    def create(cls, arg):
        self = cls()
        return [self, arg]
foo = Foo.create("bar")