退出并删除一个类实例python

时间:2012-10-28 20:55:20

标签: python sql pypy

我已阅读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内调用的实例。我需要删除这些实例,因为我不想使用空类实例

感谢阅读。

1 个答案:

答案 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()函数。)