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

在如下方法中:

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

self做什么?这意味着什么?这是强制性的吗?

__init__方法是做什么的?为什么有必要?(等)

我认为它们可能是面向对象结构,但我知道的不多。


当前回答

我自己也很难理解。即使在看完答案之后。

要正确理解__init__方法,你需要理解self。

self参数

__init__方法接受的参数是:

def __init__(self, arg1, arg2):

但实际上我们只传递了两个参数:

instance = OurClass('arg1', 'arg2')

额外的论证从何而来?

当我们通过名称(或引用)访问对象的属性时。这里的instance是对新对象的引用。我们使用instance.printargs访问实例对象的printargs方法。

为了从__init__方法中访问对象属性,我们需要一个对象引用。

每当调用方法时,对主对象的引用将作为第一个参数传递。按照惯例,你总是调用方法self的第一个参数。

这意味着在__init__方法中我们可以这样做:

self.arg1 = arg1
self.arg2 = arg2

这里我们在对象上设置属性。您可以通过以下方法验证这一点:

instance = OurClass('arg1', 'arg2')
print instance.arg1
arg1

这样的值称为对象属性。这里__init__方法设置实例的arg1和arg2属性。

来源:http://www.voidspace.org.uk/python/articles/OOP.shtml init方法

其他回答

__init__确实像一个构造函数。如果您希望任何类函数表现为非静态方法,则需要将“self”作为第一个参数传递给它们。self是类的实例变量。

注意,self实际上可以是任何有效的python标识符。例如,从Chris B的例子中,我们可以简单地写:

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

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

结果是一样的。然而,建议使用self,因为其他python更容易识别它。

我自己也很难理解。即使在看完答案之后。

要正确理解__init__方法,你需要理解self。

self参数

__init__方法接受的参数是:

def __init__(self, arg1, arg2):

但实际上我们只传递了两个参数:

instance = OurClass('arg1', 'arg2')

额外的论证从何而来?

当我们通过名称(或引用)访问对象的属性时。这里的instance是对新对象的引用。我们使用instance.printargs访问实例对象的printargs方法。

为了从__init__方法中访问对象属性,我们需要一个对象引用。

每当调用方法时,对主对象的引用将作为第一个参数传递。按照惯例,你总是调用方法self的第一个参数。

这意味着在__init__方法中我们可以这样做:

self.arg1 = arg1
self.arg2 = arg2

这里我们在对象上设置属性。您可以通过以下方法验证这一点:

instance = OurClass('arg1', 'arg2')
print instance.arg1
arg1

这样的值称为对象属性。这里__init__方法设置实例的arg1和arg2属性。

来源:http://www.voidspace.org.uk/python/articles/OOP.shtml init方法

试试这段代码。希望它能帮助很多像我一样的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 - __init__构造函数

医生-内情秀

析构函数删除对象- Jay

__init__基本上是一个函数,它将为特定对象“初始化”/“激活”类的属性,一旦创建并匹配到相应的类。 Self表示将继承这些属性的对象。