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.

これで、次のような3番目の属性をクラスに追加するまでは正常に機能します。

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 に答える