Python – __init__和self他们做了什么?

我正在学习Python编程语言,而且我遇到了一些我不太了解的东西。

在如下方法中:

def method(self, blah):
    def __init__(?):
        ....
    ....

怎么self办?这是什么意思?这是强制性的吗?

__init__方法有什么作用?为什么有必要?(等等。)

我认为它们可能是OOP结构,但我不太了解。


在这段代码中:

class A(object):
    def __init__(self):
        self.x = 'Hello'

    def method_a(self, foo):
        print self.x + ' ' + foo

… self变量表示对象本身的实例。大多数面向对象的语言都将此作为隐藏参数传递给对象上定义的方法; Python没有。你必须明确声明它。当您创建A类的实例并调用其方法时,它将自动传递,如…

a = A()               # We do not pass any argument to the __init__ method
a.method_a('Sailor!') # We only pass a single argument

__init__方法大致代表Python中的构造函数。当你调用A()Python时,为你创建一个对象,并将它作为第一个参数传递给__init__方法。任何其他参数(例如A(24, 'Hello'))也将作为参数传递 – 在这种情况下会引发异常,因为构造函数不期望它们。


是的,你是对的,这些是oop结构。

__init__是类的构造函数。该self参数引用对象的实例(如this在C ++中)。

class Point:
    def __init__(self, x, y):
        self._x = x
        self._y = y

__init__分配对象的内存时调用该方法:

x = Point(1,2)

self如果要将值保存在对象中,则必须在对象的方法中使用该参数。例如,如果您实现这样的__init__方法:

class Point:
    def __init__(self, x, y):
        _x = x
        _y = y

xy参数将存储在堆栈中的变量中,并在init方法超出范围时被丢弃。将这些变量设置为self._x并将self._y这些变量设置为Point对象的成员(可在对象的生命周期内访问)。


一个简短的例子

希望它可能会有所帮助,这里有一个简单的例子,我用来理解在类中声明的变量和在__init__函数内声明的变量之间的区别:

class MyClass(object):
     i = 123
     def __init__(self):
         self.i = 345

a = MyClass()
print a.i
345
print MyClass.i
123

简而言之:

  1. self正如它所暗示的那样,指自己 – 称之为方法的对象。也就是说,如果你有N个对象调用该方法,那么self.a将为每个N个对象引用一个单独的变量实例。想象一下a每个对象的N个变量副本
  2. __init__是其他OOP语言(如C ++ / Java)中的构造函数。基本思想是它是一种特殊的方法,在创建该类的对象时自动调用

试试这段代码。希望它能帮助像我这样的许多C程序员学习Py。

#! /usr/bin/python2

class Person:

    '''Doc - Inside Class '''

    def __init__(self, name):
        '''Doc - __init__ Constructor'''
        self.n_name = name        

    def show(self, n1, n2):
        '''Doc - Inside Show'''
        print self.n_name
        print 'Sum = ', (n1 + n2)

    def __del__(self):
        print 'Destructor Deleting object - ', self.n_name

p=Person('Jay')
p.show(2, 3)
print p.__doc__
print p.__init__.__doc__
print p.show.__doc__

输出:

Jay

Sum = 5

Doc - Inside Class

Doc - __init__ Constructor

Doc - Inside Show

Destructor Deleting object - Jay

Tags:,

添加评论

友情链接:蝴蝶教程