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

如何用另一个对象替换__init __()中的实例?

鲁鸿朗
2023-03-14
问题内容

我正在ClassA中调用构造函数,如果满足特定条件,则希望使结果对象属于其他类(ClassB)。我试着更换的第一个参数__init
()(在下面的例子中“自我”) __init (),但它似乎并没有做我想做的。

在主要方面:

import ClassA

my_obj = ClassA.ClassA(500)
# unfortunately, my_obj is a ClassA, but I want a ClassB!

在ClassA / init.py中:

import ClassB

class ClassA:
    def __init__(self,theirnumber):
        if(theirnumber > 10):
            # all big numbers should be ClassB objects:
            self = ClassB.ClassB(theirnumber)
            return
        else:
            # numbers under 10 are ok in ClassA.
            return

在ClassB / init.py中:

class ClassB:
    pass

问题答案:

您需要__new__()。(并且您还需要通过子类化使其成为一种新型类,假设您使用的是Python2 object。)

class ClassA(object):
    def __new__(cls,theirnumber):
        if theirnumber > 10:
            # all big numbers should be ClassB objects:
            return ClassB.ClassB(theirnumber)
        else:
            # numbers under 10 are ok in ClassA.
            return super(ClassA, cls).__new__(cls, theirnumber)

__new__()__init__()。之前作为类实例化过程的一部分运行。基本上__new__()是实际创建新实例的东西,__init__()然后调用它初始化其属性。这就是为什么您可以使用__new__()但不能__init__()更改创建的对象的类型的原因:一旦__init__()启动,该对象已经创建,并且更改其类型为时已晚。(嗯……不是真的,但是这成为了非常神秘的Python黑魔法。)请参阅文档。

不过,在这种情况下,我会说工厂函数更合适,例如

def thingy(theirnumber):
    if theirnumber > 10:
        return ClassB.ClassB(theirnumber)
    else:
        return ClassA.ClassA(theirnumber)

顺便说一句,请注意,如果执行__new__()上述操作,则ClassB返回a时,将 不会
调用__init__()ClassB实例的方法!Python仅在从返回的对象是其中包含方法的类的实例(在此处)时调用。这是支持工厂功能方法的另一个论点。
____init__()``__new__()``__new__()``ClassA



 类似资料:
  • 我创建了以下主题、流和表: 为以上创建的主题创建表和流。 我可以看到以下数据: 我的问题: 现在我要将addressId 1(Fremont)替换为addressId 1(Detroit)。我怎么能那样做? 我还尝试打印输入到控制台的流,如票证中所述 是否将Kafka流输入打印到控制台? 只是,我可以看到下面的输出: 12:04:42.145[StreamThread-1]DEBUG org.ap

  • 我想在一个JFrame中用另一个Jpanel替换一个Jpanel,我已经搜索并尝试了我的代码,但什么也没有发生,这是我的代码: 有人能帮帮我吗?多谢

  • 我为欢迎屏幕设计了一个接口,其中有一个JFrame,包括两个JPanel(JPanel1在右边,JPanel2在左边)。左边的按钮用于切换JPanel1中的面板。我想按下一个按钮,用另一个JPanel替换JPanel1内容,但我不知道怎么做。请帮忙。

  • 问题内容: 什么功能可以用另一个字符串替换一个字符串? 实例1:将替代哪些用? 例2:将替代哪些用? 问题答案: 该方法是你要寻找的。 例如:

  • 我的spring应用程序中有一个功能有问题。我在同一个数据库中有两个表,它们都包含相同类型的数据(id、标题、描述和日期)。我可以从一个表中获取数据,但不知道如何插入到第二个表中。 在我的@服务层中,我可以从表A中获取数据。但不知道如何转换为另一个类对象(两个类都包含samne数据) 注入JPA储备 还有从表A获取对象的代码(TasksRepository-JpaRepository)

  • 假设我有以下代码: 这段代码运行后,的值将为