我读到构造函数就像传递给类的第一个参数一样,这对我来说很有意义,因为参数似乎是通过__init__
方法传递给类的。例如,
class NewsStory(object):
def __init__(self, guid, title, subject, summary, link):
self.guid = guid
self.title = title
self.subject = subject
self.summary = summary
self.link = link
def get_guid(self):
return self.guid
def get_title(self):
return self.title
def get_subject(self):
return self.subject
def get_summary(self):
return self.summary
def get_link(self):
return self.link
firstStory = NewsStory('Globally Unique Identifier', \
'first_title','first_subject','This is an example \
sumary','[email protected]')
print firstStory.get_guid() # prints Globally Unique Identifier
因此,当我“调用”该类时,是否将__init__
方法中的参数传递给它?我是班上的新手,我读到的所有内容我都很难理解和混淆。谢谢!
编辑1
我发现这个问题有助于解释某些事情,例如new和init之间的区别,对不起,我不知道如何添加链接,必须剪切并粘贴:__init__可以做什么,__new__不能呢?
我在构造器之间看到一个误解,即构造对象和初始化对象:
使用
__new__
时,你需要控制一个创建新实例。使用__init__
时,你需要一个新的实例的控件初始化。
因此,我们在这里必须小心。
我读到构造函数就像传递给类的第一个参数一样,这对我来说很有意义,因为参数似乎是通过
__init__
方法传递给类的。
构造函数不会传递给类,确切地说,构造函数(__new__
)的结果将是该类或其子类中每个实例方法的第一个参数(注意:__new__
仅适用于新样式类):
class A:
def __new__(self):
return 'xyz'
查看调用类(创建对象)时发生的情况:
>>> A()
'xyz'
>>> type(A())
<class 'str'>
调用类不再返回类型的实例A
,因为我们更改了构造函数的机制__new__
。实际上,这样做不仅可以改变类的整体含义,而且很难破译。您不太可能在创建特定对象的过程中切换对象的类型。我希望这句话有意义,如果没有,那么在您的代码中它将如何有意义!
class A:
def __new__(self):
return 'xyz'
def type_check(self):
print(type(self))
看看当我们尝试调用type_check
方法时会发生什么:
>>> a = A()
>>> a
'xyz'
>>> a.type_check()
AttributeError: 'str' object has no attribute 'type_check'
a
不是class的对象A
,因此基本上您不再具有访问class的权限A
。
__init__
用于初始化对象的状态。通过在创建期间初始化对象的成员__init__
来解决此问题,而不是调用将在创建对象后初始化其成员的方法,因此,如果您name
在类内部调用了一个成员,并且希望name
在创建类时进行初始化,而不是调用额外的方法init_name('name')
,您一定会__init__
为此目的使用。
因此,当我“调用”该类时,是否将
__init__
方法中的参数传递给它?
当您调用类时,您传递了参数(传递给)__init__
方法吗?
无论您传递类的任何参数,所有参数都将传递给__init__
您,并自动为您添加一个附加参数,这是通常称为的隐含对象self
(实例本身),Python始终将其作为最左侧参数传递:
class A:
def __init__(self, a, b):
self.a = a
self.b = b
A( 34, 35)
self.a = 34 | |
| |
| | self.b = 35
init(self, a, b)
|
|
|
The instance that you created by calling the class A()
注意: __init__
适用于经典类和新样式类。然而,__new__
工程仅适用于新的样式类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句