我已阅读this question,但我不清楚。我这样定义了我的课:
from sqlite3 import Connection, Cursor, Row, connect
class myclass(object):
def __init__(self,number):
co = connect('C:\\mydatabase.sqlite')
co.row_factory = Row
with connection:
cu = connection.cursor()
sql = '''SELECT * FROM mytable WHERE Number= {n} LIMIT 1'''.format(n = number)
cu.execute(sql)
for i in cu:
self.classattribute1 = i['Field1']
self.classattribute2 = i['Field2']
etc.
现在这个工作正常,直到我想在我的类中添加第三个属性,如:
self.classattribute3 = self.classattribute1 + self.classattribute2
AttributeError: 'myclass' object has no attribute 'classattribute1'
如果SELECT
语句没有返回任何内容,如果数字不在数据库中,则无效。
现在,当我调用myclass的实例时,我想做的是:
myclassinstance1 = myclass(100)
我想写一些像:
if cu.fetchone() == None:
#code to exit the method __init__ and to delete my class instance here
我不知道如何退出并删除我在myclass
内调用的实例。我需要删除这些实例,因为我不想使用空类实例。
感谢阅读。
答案 0 :(得分:2)
只需创建一个工厂函数,它将返回一个新实例,如果无法加载则为None:
class MyClass(object):
def __init__(self, attribute1, attribute2, ...):
self.attribute1 = attribute1
self.attribute2 = attribute2
# ...
@staticmethod
def load_from_db(number):
# set up and query database
record = cursor.fetchone()
if record == None:
return None
else:
return MyClass(record['Field1'], record['Field2'], ...)
然后从数据库加载MyClass对象:
my_obj = MyClass.load_from_db(number)
您无法在Python中删除对象(来自__init__
或任何地方),您只能从范围中删除对象的引用包含此引用。 (例如,调用MyClass()
的范围,如上面代码中的load_from_db()
函数。)