在以下情况下需要实现__new__方法的帮助

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在以下情况下需要实现__new__方法的帮助相关的知识,希望对你有一定的参考价值。

我想知道以下情况是否可以使用__new__特殊方法使用。如果是这样,我想听听stackoverflow。我有一个类名Listing,它从文件中读取记录,然后在查询中将它们转换。简而言之,代码段最初会从文件中读取所有行并将其转换为列表列表。同样,此列表列表将传递给Event的loadlist方法,该方法读取每个列表,解压缩然后将它们设置为类属性。

例如,我有以下三个记录

1|305|8|1851|Gotterdammerung|2008-01-25 14:30:00
2|306|8|2114|Boris Godunov|2008-10-15 20:00:00
3|302|8|1935|Salome|2008-04-19 14:30:0

[这里,Listing.py读取上述内容并将其转换为下面给出的查询]

INSERT INTO EVENT (EVENTID,VENUEID,CATID,DATEID,EVENTNAME,STARTTIME) VALUES ('1','305','8','1851','Gotterdammerung','2008-01-25 14:30:00')
INSERT INTO EVENT (EVENTID,VENUEID,CATID,DATEID,EVENTNAME,STARTTIME) VALUES ('2','306','8','2114','Boris Godunov','2008-10-15 20:00:00')
INSERT INTO EVENT (EVENTID,VENUEID,CATID,DATEID,EVENTNAME,STARTTIME) VALUES ('3','302','8','1935','Salome','2008-04-19 14:30:00')

[C0的整个程序

Listing.py

当我运行程序时,遇到以下错误。class Event: def __init__(self,eventid,venueid,catid,dateid,eventname,starttime): self.eventid = eventid self.venueid = venueid self.catid = catid self.dateid = dateid self.eventname = eventname self.starttime = starttime def __iter__(self): return (i for i in (self.eventid,self.venueid,self.catid,self.dateid,self.eventname,self.starttime)) def __str__(self): return str(tuple(self)) def __repr__(self): return "INSERT INTO EVENT (EVENTID,VENUEID,CATID,DATEID,EVENTNAME,STARTTIME) VALUES ({!r},{!r},{!r},{!r},{!r},{!r})".format(*self) @classmethod def loadlist(cls,records): return [cls(*record) for record in records] if __name__ == '__main__': records = [] with open('tickitdb/allevents_pipe.txt','r') as f: records = list(map(lambda s:s.rstrip(' ').split('|'),f.readlines())) events = Event.loadlist(records=records) with open('events.sql','w+') as f: print('writing file') for event in events: f.write(repr(event)+" ") 。我想出了这背后的根本原因。当程序读取文件并将其转换为记录列表时,就有记录为空,例如[]

TypeError: __init__() missing 5 required positional arguments:

对于第四条记录,没有值。因此,为避免此类错误,我决定使用1.['1','305','8','1851','Gotterdammerung','2008-01-25 14:30:00'] 2.['2','306','8','2114','Boris','Godunov','2008-10-15 20:00:00'] 3.['3','302','8','1935','Salome','2008-04-19 14:30:0'] 4.[''] 特殊方法。通过放置__new__条件,然后检查列表是否为空,可以实现相同的功能。但是然后我想知道如何利用new

特殊方法来避免这种情况。对python的了解很少,我已经填充了[[new特殊方法,但随后遇到了以下错误if

RecursionError: maximum recursion depth exceeded while calling a Python object

我们可以使用   def __new__(cls,*args,**kwargs):
        if len(args) != 0:
            instance = Event.__new__(cls,*args,**kwargs)
            return instance
特殊方法过滤记录吗? 

我想知道使用__new__特殊方法是否可以使用以下方案。如果是这样,我想听听stackoverflow。我有一个类名Listing,它从文件中读取记录,然后...

答案
所以我会这样解决:
另一答案
您想做的事完全有可能。但是,一旦实例从

new

以上是关于在以下情况下需要实现__new__方法的帮助的主要内容,如果未能解决你的问题,请参考以下文章

由Python通过__new__实现单例模式,所想到的__new__和__init__方法的区别

python面试题

Python魔法方法:__new __(cls[,*args]) 方法

Python魔法方法:__new __(cls[,*args]) 方法

十条Python面试题陷阱,看看你是否会中招

python如何实现静态变量