我正在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)
假设我有以下代码: 这段代码运行后,的值将为