Python中的类是否需要__init__构造函数?

偶像

我读到构造函数就像传递给类的第一个参数一样,这对我来说很有意义,因为参数似乎是通过__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

我发现这个问题有助于解释某些事情,例如newinit之间的区别,对不起,我不知道如何添加链接,必须剪切并粘贴:__init__可以做什么,__new__不能呢?

敌百虫

我在构造器之间看到一个误解,即构造对象和初始化对象:

Python的使用__new____init__

使用__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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python中的类是否需要__init__构造函数?

来自分类Dev

在Python 3中扩展类并使用__init__构造它

来自分类Dev

从Python中的构造函数__init__内省参数

来自分类Dev

Python:类中的 __init__

来自分类Dev

Python:将参数冻结到类__init__函数中

来自分类Dev

如何为需要大量实例变量的Python类优雅/高效地编写__init__函数?

来自分类Dev

ReactJS组件类是否需要构造函数

来自分类Dev

类作为python __init__中的参数

来自分类Dev

python类的属性不在__init__中

来自分类Dev

Python __init__ 与 C++ 构造函数的比较

来自分类Dev

Python:从__init__函数中调用类变量和类方法

来自分类Dev

我是否需要在新类中声明构造函数和析构函数?

来自分类Dev

Python:如何使用类方法在__init__函数中定义变量?

来自分类Dev

当类的__init__需要参数时,构造不带参数的对象(矩形)

来自分类Dev

带有 __init__ 函数的 Python 类多重继承

来自分类Dev

是将stl中的vector,list或map作为成员的类是否需要复制构造函数

来自分类Dev

是否需要初始化在Javascript中作为“类”构造函数参数传递的变量?

来自分类Dev

是否需要初始化在Javascript中作为“类”构造函数参数传递的变量?

来自分类Dev

Django:当没有定义 __init__() 时,模型类如何接受构造函数参数?

来自分类Dev

Python类__init__确认

来自分类Dev

python类的__init__方法

来自分类Dev

在某些类的python中的__init__ def中获取变量

来自分类Dev

python模块__init__函数

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

python中的函数__init__不起作用

来自分类Dev

Python在__init__中为包和函数创建if elif

来自分类Dev

OOP PYTHON:使用cls()创建多个构造函数而无需调用__init__

来自分类Dev

python类构造函数中的缩进错误

Related 相关文章

  1. 1

    Python中的类是否需要__init__构造函数?

  2. 2

    在Python 3中扩展类并使用__init__构造它

  3. 3

    从Python中的构造函数__init__内省参数

  4. 4

    Python:类中的 __init__

  5. 5

    Python:将参数冻结到类__init__函数中

  6. 6

    如何为需要大量实例变量的Python类优雅/高效地编写__init__函数?

  7. 7

    ReactJS组件类是否需要构造函数

  8. 8

    类作为python __init__中的参数

  9. 9

    python类的属性不在__init__中

  10. 10

    Python __init__ 与 C++ 构造函数的比较

  11. 11

    Python:从__init__函数中调用类变量和类方法

  12. 12

    我是否需要在新类中声明构造函数和析构函数?

  13. 13

    Python:如何使用类方法在__init__函数中定义变量?

  14. 14

    当类的__init__需要参数时,构造不带参数的对象(矩形)

  15. 15

    带有 __init__ 函数的 Python 类多重继承

  16. 16

    是将stl中的vector,list或map作为成员的类是否需要复制构造函数

  17. 17

    是否需要初始化在Javascript中作为“类”构造函数参数传递的变量?

  18. 18

    是否需要初始化在Javascript中作为“类”构造函数参数传递的变量?

  19. 19

    Django:当没有定义 __init__() 时,模型类如何接受构造函数参数?

  20. 20

    Python类__init__确认

  21. 21

    python类的__init__方法

  22. 22

    在某些类的python中的__init__ def中获取变量

  23. 23

    python模块__init__函数

  24. 24

    杀死在Python的__init__类中创建的子进程

  25. 25

    杀死在Python的__init__类中创建的子进程

  26. 26

    python中的函数__init__不起作用

  27. 27

    Python在__init__中为包和函数创建if elif

  28. 28

    OOP PYTHON:使用cls()创建多个构造函数而无需调用__init__

  29. 29

    python类构造函数中的缩进错误

热门标签

归档