【问题标题】:How to call sub function in a class in python?如何在python的类中调用子函数?
【发布时间】:2019-12-14 09:36:44
【问题描述】:

(我对 python 和 stackoverflow 都很陌生。)

def A():
    def B():
        print("I'm B")
    A.B = B

A()
A.B()

输出:

"I'm B"

这很好用。我想要的是将它放在这样的类中(不起作用。我只是尝试过..)

class Student:
    def A(self):
        def B():
            print("I'm B")
        self.A.B = B

我不知道如何制作类以及如何调用类中的子函数。

【问题讨论】:

    标签: python function call


    【解决方案1】:

    Python 函数是first-class objectsWhat is first class function in Python

    所以第一段代码是完全有效的。它只是在函数中添加了一个属性B,以后可以使用A.B() 调用它。

    但是对于第二段代码,这是无效的,因为self.A返回了对Student类的A方法的引用

    <bound method Student.A of <__main__.Student object at 0x7f5335d80828>>
    

    self.A没有B属性,所以返回错误

    AttributeError: 'method' object has no attribute 'B'
    

    现在快速解决方法是将其分配给self.B

    class Student:
        def A(self):
            def B():
                print("I'm B")
            self.B = B
    
    a = Student()
    a.A()
    a.B()
    

    虽然上面的代码有效,但这是一个非常糟糕的方法,因为在调用 B 之前,您必须始终为每个实例化的对象调用 A

    【讨论】:

    • 据我了解,函数可以有属性,方法不能有属性。这是正确的吗?
    【解决方案2】:

    您不需要引用 self,因为内部函数 B 已在此处定义。应该是这样的:

    class Student:
        def A(self):
            def B():
                print("I'm B")
            B()
    

    【讨论】:

      【解决方案3】:

      我从不使用类,但你可以这样做吗?

      class A:                       
          def __call__(self):          //  so you can call it like a function
              def B():               
                  print("i am B")     
              B()
      
      call_A = A()                     //  make the class callable
      call_A()                         //  call it
      

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 2023-01-05
        • 2023-03-05
        • 2020-11-11
        • 1970-01-01
        • 2020-09-13
        • 2017-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多