蟒蛇

我正在学习Python编程语言,并且遇到了一些我不完全理解的东西。

在像这样的方法中:

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

self做什么? 这是什么意思? 它是强制性的吗?

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

我认为他们可能是面向对象的构造,但我不太了解。


在这个代码中:

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._xself._y这些变量设置为Point对象的成员(可在对象的整个生命周期内访问)。


一个简单的例子

希望它可能有所帮助,下面是一个简单的示例,我用它来理解类中声明的变量与__init__函数内声明的变量之间的区别:

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

a = MyClass()
print a.i
345
print MyClass.i
123
链接地址: http://www.djcxy.com/p/54733.html

上一篇: Python

下一篇: self, no self and cls