Pet*_*ter 0 ruby python constructor
我想知道是否有人知道一个特定的原因(除了纯粹的风格)为什么以下语言这些语法启动一个类?
蟒蛇:
class MyClass:
def __init__(self):
x = MyClass()
Run Code Online (Sandbox Code Playgroud)
红宝石:
class AnotherClass
def initialize()
end
end
x = AnotherClass.new()
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么用于构造函数的语法和用于实际获取类的实例的语法是如此不同.当然,我知道它并没有真正有所作为,但是,例如,在ruby中,使构造函数"new()"有什么问题?
当您创建类的对象时,您所做的不仅仅是初始化它.你正在为它分配内存,然后初始化它,然后返回它.
还要注意,在Ruby中,new()是一个类方法,initialize()而是一个实例方法.如果你只是覆盖new(),你必须首先创建对象,然后对该对象进行操作,然后返回它,而不是更简单的initialize()地方,你可以引用它self,因为内置的对象已经为你创建了new() (或者在Ruby中,不要self暗示它.
在Objective-C中,您实际上可以更清楚地看到发生了什么(但更详细),因为您需要单独进行分配和初始化,因为Objective-C无法将参数列表从分配方法传递到初始化:
[[MyClass alloc] initWithFoo: 1 bar: 2];
Run Code Online (Sandbox Code Playgroud)