【问题标题】:How to call functions in a main function and the main function in constructor with an object creation statement calling the constructor automatically?如何使用自动调用构造函数的对象创建语句调用主函数中的函数和构造函数中的主函数?
【发布时间】:2019-05-24 18:01:20
【问题描述】:

我是 Python 新手,几乎一无所知。我正在尝试将函数链接到构造函数,但无法做到。如何调用main函数中的前2个函数和构造函数中的main函数?

我可以在创建对象后通过在外部调用inpVal()check()来执行没有_init_()exec()的代码,但是当我这样做时它没有显示任何输出。

class Acute:

    def _init_(self):
        self.exec()

    def inpVal(self):
        print("Enter 3 positive integers(angles):")
        self.ang1 = int(input())
        self.ang2 = int(input())
        self.ang3 = int(input())

    def check(self):
        if self.ang1 <=0 or self.ang2 <=0 or self.ang3 <=0:
            print("Invalid Input")
        elif self.ang1+self.ang2+self.ang3 != 180:
            print("Not a Triangle")
        elif self.ang1 >=90 or self.ang2 >=90 or self.ang3 >=90:
            print("Not an Acute Triangle")
        else:
            print("Acute Triangle")

    def exec(self):
        self.inpVal()
        self.check()

t1 = Acute()

我希望在类声明之后只有一个对象创建语句,并且默认情况下会调用构造函数,并从中调用 exec 函数,该函数将调用输入和检查函数。

【问题讨论】:

  • 可能的错字:应该是__init__(self)(前后双下划线)。
  • 没有。它是python类中的一个特殊函数。
  • 所以...嗯...为什么def __init__ 不适合您? “对象创建语句将在那里”和“默认情况下将被调用”,这就是您所要求的,不是吗?如果我错了,请纠正我,因为我在理解最后一段时有点困难。
  • 我不明白您的第一条评论...我确实使用了双下划线。但我必须重新检查。不过谢谢。
  • 谢谢...问题其实是我没有给双下划线。

标签: python python-3.x


【解决方案1】:

您的代码存在以下问题:

  • _init_ 不是创建对象时调用的 python 初始化函数的正确名称。它应该是 __init__。因为,您还没有给出它,所以会创建一个默认的初始化函数并调用它。
  • exec 是现有的 python 函数名称。因此,需要避免。

请看修改后的代码:

class Acute:
    def __init__(self):
        self.exec_custom()

    def inpVal(self):
        print("Enter 3 positive integers(angles):")
        self.ang1 = int(input())
        self.ang2 = int(input())
        self.ang3 = int(input())

    def check(self):
        if self.ang1 <=0 or self.ang2 <=0 or self.ang3 <=0:
            print("Invalid Input")
        elif self.ang1+self.ang2+self.ang3 != 180:
            print("Not a Triangle")
        elif self.ang1 >=90 or self.ang2 >=90 or self.ang3 >=90:
            print("Not an Acute Triangle")
        else:
            print("Acute Triangle")

    def exec_custom(self):
        self.inpVal()
        self.check()

t1 = Acute()

输出:

Enter 3 positive integers(angles):
1
2
3
Not a Triangle

【讨论】:

【解决方案2】:

如何调用main函数中的前2个函数和构造函数中的main函数?

您不会在构造函数中调用 main 函数。根据定义main function 是你的脚本的入口点。

__main__ 模块中,您应该创建自己的类。

【讨论】:

    【解决方案3】:

    以下代码按预期工作:

    class Acute:
    
        def __init__(self):
            self.exec_method()
            self.ang1 = None
            self.ang2 = None
            self.ang3 = None
    
        def inp_val(self):
            print("Enter 3 positive integers(angles):")
            self.ang1 = int(input())
            self.ang2 = int(input())
            self.ang3 = int(input())
    
        def check(self):
            if self.ang1 <= 0 or self.ang2 <= 0 or self.ang3 <= 0:
                print("Invalid Input")
            elif self.ang1+self.ang2+self.ang3 != 180:
                print("Not a Triangle")
            elif self.ang1 >= 90 or self.ang2 >= 90 or self.ang3 >= 90:
                print("Not an Acute Triangle")
            else:
                print("Acute Triangle")
    
        def exec_method(self):
            self.inp_val()
            self.check()
    
    
    t1 = Acute()
    

    输出:

    >>>python test.py 
    Enter 3 positive integers(angles):
    12
    32
    43
    Not a Triangle
    

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2021-11-23
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多