类变量不会被放克所覆盖



我正在尝试为登录门户读取数据库。这部分是在类dbreader中工作的
用户名和密码将保存在变量cUsername和cUserpass中。在它们被函数覆盖之前,变量被定义为空字符串""。\

但是当我尝试这个:username = dbreader().cUsername时,我得到一个空字符串。

这是代码:

class dbreader:
db_path = "Home-Tool/UserDB"
cUsername = ""
cUserpass = ""
cName = ""
id_range_bool = False
iddb = 1
def __init__(self):
self.connection = _sqlite3.connect(self.db_path)
self.c = self.connection.cursor()
def close(self):
self.connection.close()
def run_sqlCommand(self):
while True:
sqlcom = "SELECT * FROM userinfos WHERE id = " + str(self.iddb)
self.c.execute(sqlcom)
self.connection.commit()
for row in self.c.fetchall():  # self.c = tuble(4)
self.cID = str(row[0])
self.cUsername = str(row[1])
self.cUserpass = str(row[2])
self.cName = str(row[3])
if self.cUsername == cEntryUsername:
break
if not self.id_range_bool:
break
else:
self.id_range_bool = False
self.iddb += 1

dbreader().run_sqlCommand()
username = dbreader.cUsername
userpass = dbreader.cUserpass
name = dbreader.cName

由于dbreader是一个类,访问属性将把它作为类变量而不是实例返回。dbreader.cUsernamedbreader.cPassword的设置方式永远不会改变,因为没有任何内容会覆盖它们。

dbreader的特定实例上,这些属性将被覆盖。但你必须使用相同的实例:

dbreader_instance = dbreader()  # create an instance, save the instance to a variable
dbreader_instance.run_sqlCommand()
username = dbreader_instance.cUsername
userpass = dbreader_instance.cUserpass
name = dbreader_instance.cName

然后,您可以创建dbreader的另一个单独实例,它可能具有与上面的不同的cUsernamecUserpass

最新更新