python中的objectName.\uuuu init\uuuuu是如何工作的?

python中的objectName.\uuuu init\uuuuu是如何工作的?,python,Python,我今天看到了这个python函数 class className(GObject.Object, Loggable): def __init__(self, project): GObject.Object.__init__(self) Loggable.__init__(self) object.\uuuu init\uuuuu如何工作 我知道init函数是一个构造函数,用于初始化类实例对象的默认值?(我对类实例和类对象之间的区别也很困惑)\uuu ini

我今天看到了这个python函数

class className(GObject.Object, Loggable):
    def __init__(self, project):
       GObject.Object.__init__(self)
       Loggable.__init__(self)
object.\uuuu init\uuuuu如何工作


我知道init函数是一个构造函数,用于初始化类实例对象的默认值?(我对类实例和类对象之间的区别也很困惑)

\uuu init\uuu
每次使用带括号的类名时都会被调用

class MyClass:  # 1
    def __init__(self, number):  # 2
        self.x = number  # 3

if __name__ == '__main__':
    instance_of_my_class = MyClass(5)  # 0, 4
让我们一步一步来:

  • 0:我们使用类
    MyClass
    ,并用值5调用它
  • 1:MyClass通常是类对象;它不包含任何特定的实例值
  • 2:从0开始,调用
    \uuuuu init\uuuu
    ;它接收两个参数:
    self,number
    。前者是对我们正在创建的
    MyClass
    的新实例的引用;后者只是我们在初始化时传递的论点
  • 3:我们可以将
    number
    参数存储在类中的一个名为x的字段中
  • 4:
    \uuuuu init\uuuuuu
    自动返回我们创建的类的新实例,我们将它存储在某个地方(简化,它实际上没有)
但是,类实例和类方法或属性之间存在差异

  • 类:一组对象的蓝图,这些对象共享相同的字段和方法,但稍后将使用不同的值初始化
  • 类实例/对象:类的具体实例,为每个属性提供一些具体值
  • 类方法/属性:与特定实例无关,但通常与类相关的值或方法
类似地,类方法是可以在没有实例的情况下调用的方法:

class MyClass:
    def __init__(self):
        pass
    
    @classmethod
    def sum(cls, a, b):
        return a + b


if __name__ == '__main__':
    instance1 = MyClass()
    print(instance1.sum(1, 1))  # >>> 2, as expected
    print(MyClass.sum(1, 1))  # >>> 2! we can call such method without an instance but from the class itself

\uuuu init\uuuu
如何工作是一个非常普遍的问题,您可以在任何一本像样的Python书籍或许多在线资源中阅读。在这里询问之前请先这样做。相关:
\uuuuu init\uuuuuu
不返回任何内容,
\uuuu new\uuuuuu
会返回任何内容。@timgeb谢谢!我知道。由于这个问题似乎不熟悉OOP(至少在Python中是这样),我决定简化答案;我认为把他和这个细节混淆并不能帮助他更好地理解它。我补充了一句话。
class MyClass:
    def __init__(self):
        pass
    
    @classmethod
    def sum(cls, a, b):
        return a + b


if __name__ == '__main__':
    instance1 = MyClass()
    print(instance1.sum(1, 1))  # >>> 2, as expected
    print(MyClass.sum(1, 1))  # >>> 2! we can call such method without an instance but from the class itself