2

我读过这个问题,但我不清楚。我这样定义我的类:

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

谢谢阅读。

4

1 回答 1

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()上面代码中的函数。)

于 2012-10-28T21:01:24.007 回答