当前位置: 首页 > 面试题库 >

Python:始终使用__new__而不是__init__吗?

臧曜瑞
2023-03-14
问题内容

我了解都__init____new__工作。我想知道是否有什么__init__可以做的__new__

即可以使用__init__以下模式替换:

class MySubclass(object):
    def __new__(cls, *args, **kwargs):
        self = super(MySubclass, cls).__new__(cls, *args, **kwargs)
        // Do __init__ stuff here
        return self

我想问的是,我想让Python OO的这一方面更适合我。


问题答案:

guido帖子中的一个可能答案(感谢@ fraca7):

例如,在pickle模块中,__new__用于反序列化对象时创建实例。在这种情况下,将创建实例,但__init__不会调用该方法。

还有其他类似的答案吗?

我接受这个答案是对我自己的问题的“是”:

我想知道是否有什么__init__可以做的__new__

是的,与不同的是,在酸洗过程中不会执行__new__您放入__init__方法中的操作。 __new__无法区分。



 类似资料:
  • 通过之前的学习,我们已经知道定义一个类时,我们经常会通过 __init__(self) 的方法在实例化对象的时候,对属性进行设置。 比如下面的例子: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- class User(object): def __init__(self, name, age): self.name = na

  • 问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变

  • 问题内容: 我一直在设置元类,如下所示: 但是我只是遇到了这样定义的元类: 有什么理由比另一个更喜欢吗? 更新 :请记住,我在询问有关在类中使用和的问题。我已经在另一堂课中了解了它们之间的区别。但是在元类中,我不能用来实现缓存,因为仅在元类中创建类时才调用它。 问题答案: 如果要在创建类之前更改属性dict或更改基元组,则必须使用。当看到参数时,该类对象已经存在。另外,如果要返回除所讨论类型的新创

  • 问题内容: 在讨论元类时,文档指出: 当然,您也可以覆盖其他类方法(或添加新方法)。例如,在元类中定义自定义方法可在调用类时允许自定义行为,例如,并非总是创建新实例。 我的问题是:假设我想在调用类时具有自定义行为,例如缓存而不是创建新对象。我可以通过重写类的方法来做到这一点。什么时候我想用它定义一个元类?这种方法带来了什么是无法实现的? 问题答案: 直接回答你的问题是:当你想要做 更多的 不仅仅是

  • 本文向大家介绍Python中__init__和__new__的区别详解,包括了Python中__init__和__new__的区别详解的使用技巧和注意事项,需要的朋友参考一下 __init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。例如: 这样便是__init__最普通的用法了。但

  • 这个__new__确实很少见到,先做了解吧. __new__是一个静态方法,而__init__是一个实例方法. __new__方法会返回一个创建的实例,而__init__什么都不返回. 只有在__new__返回一个cls的实例时后面的__init__才能被调用. 当创建一个新实例时调用__new__,初始化一个实例时用__init__. stackoverflow ps: __metaclass_