我正在学习 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
您的x
和y
参数将存储在堆栈中的变量中,并且当 init 方法超出范围时将被丢弃。将这些变量设置为self._x
和self._y
这些变量设置为Point
对象的成员(在对象的生存期内可访问)。
希望对您有所帮助,这是一个简单的示例,我用它来了解在类内部声明的变量与在__init__
函数内部声明的变量之间的区别:
class MyClass(object):
i = 123
def __init__(self):
self.i = 345
a = MyClass()
print(a.i)
print(MyClass.i)
输出:
345
123