我对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'声明和印刷"这些是相同的"?
提前致谢。
答案 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
返回False
或check()
。
注意:使用 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")