在以下情况下需要实现__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)+"
")
。我想出了这背后的根本原因。当程序读取文件并将其转换为记录列表时,就有记录为空,例如[]
特殊方法来避免这种情况。对python的了解很少,我已经填充了[[new特殊方法,但随后遇到了以下错误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
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魔法方法:__new __(cls[,*args]) 方法