方法同时返回自身和一个值
Method returning itself and a value at the same time
我正在 mysql 连接器之上创建 python 包装器。到目前为止一切都很简单:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
pass
def getcolumns(self, database=None):
columns = ("columnA1", "columnA2")
return columns
def getvalues(self, table=None, columns=None):
values = ("valB1", "valB2")
columns = columns
return values
def getprimary_key(self, table=None):
table_key = "someTableKey"
return table_key
db_conn = DBconnector()
mycolumns = db_conn.getcolumns()
myvalues = db_conn.getvalues()
mykey = db_conn.getprimary_key()
print(mycolumns, myvalues, mykey)
>>>> ('columnA1', 'columnA2') ('valB1', 'valB2') someTableKey
现在,我想实现链式方法,如 .as_list()
、.as_dict()
等...这将使我能够在某些情况下以我需要的方式获取数据。例如,当我询问 db_conn.getvalues.asdict()
时,我将获得值和列作为键。
我可以这样实现它:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
self.columns = columns
self.values = values
def getvalues(self, table=None, columns=None):
self.values = ("valB1", "valB2")
self.columns = columns
return self
def __repr__(self):
return str(self.values)
def asdict(self):
mydict = {}
for idx, col in enumerate(self.columns):
mydict[col] = self.values[idx]
return mydict
db_conn = DBconnector()
mycolumns = db_conn.getvalues(columns=["mycolumn1", "mycolumn2"])
print(mycolumns)
print(type(mycolumns))
mydictcolumns = mycolumns.asdict()
print(mydictcolumns)
>>>> ('valB1', 'valB2')
>>>> <class '__main__.DBconnector'>
>>>> {'mycolumn1': 'valB1', 'mycolumn2': 'valB2'}
但我对这种方法几乎没有问题和疑问:
Main 方法 getvalues()
将 return 仅是我无法再直接解析的对象,我将不得不实现其他方法来获取像 .values()
(?) 这样的值。
总的来说,我不确定如何不过分复杂,使其用户友好和可读。设计这种 class/module 的正确方法是什么?
虽然您的意图是好的(“友好且可读”),但实施令人怀疑:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
self.columns = columns
self.values = values
def getvalues(self, table=None, columns=None):
self.values = ("valB1", "valB2")
self.columns = columns
return self
您使用 columns
和 values
启动了数据库连接器?连接器应该允许读取和写入数据库,为什么值?如果选择从数据库中读取内容会怎样。连接器中的 table 名称在哪里?原始代码非常混乱,希望您可以将其重构为更具可读性的代码。
对于 Stack Overflow https://whosebug.com/help/mcve 也更容易回答,下次尝试让您的问题更有针对性。
如果只有你的问题而没有代码,我会说创建一个连接器 return 本机数据库查询结果类型,并在 class 之外保留一个单独的函数以将此结果转换为不同的类型(例如元组到字典)。
一般来说,我认为数据库连接的一个非常简单的介绍是
https://dataset.readthedocs.io/en/latest and also https://ponyorm.com 用于快速进入 ORM 领域。
我正在 mysql 连接器之上创建 python 包装器。到目前为止一切都很简单:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
pass
def getcolumns(self, database=None):
columns = ("columnA1", "columnA2")
return columns
def getvalues(self, table=None, columns=None):
values = ("valB1", "valB2")
columns = columns
return values
def getprimary_key(self, table=None):
table_key = "someTableKey"
return table_key
db_conn = DBconnector()
mycolumns = db_conn.getcolumns()
myvalues = db_conn.getvalues()
mykey = db_conn.getprimary_key()
print(mycolumns, myvalues, mykey)
>>>> ('columnA1', 'columnA2') ('valB1', 'valB2') someTableKey
现在,我想实现链式方法,如 .as_list()
、.as_dict()
等...这将使我能够在某些情况下以我需要的方式获取数据。例如,当我询问 db_conn.getvalues.asdict()
时,我将获得值和列作为键。
我可以这样实现它:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
self.columns = columns
self.values = values
def getvalues(self, table=None, columns=None):
self.values = ("valB1", "valB2")
self.columns = columns
return self
def __repr__(self):
return str(self.values)
def asdict(self):
mydict = {}
for idx, col in enumerate(self.columns):
mydict[col] = self.values[idx]
return mydict
db_conn = DBconnector()
mycolumns = db_conn.getvalues(columns=["mycolumn1", "mycolumn2"])
print(mycolumns)
print(type(mycolumns))
mydictcolumns = mycolumns.asdict()
print(mydictcolumns)
>>>> ('valB1', 'valB2')
>>>> <class '__main__.DBconnector'>
>>>> {'mycolumn1': 'valB1', 'mycolumn2': 'valB2'}
但我对这种方法几乎没有问题和疑问:
Main 方法 getvalues()
将 return 仅是我无法再直接解析的对象,我将不得不实现其他方法来获取像 .values()
(?) 这样的值。
总的来说,我不确定如何不过分复杂,使其用户友好和可读。设计这种 class/module 的正确方法是什么?
虽然您的意图是好的(“友好且可读”),但实施令人怀疑:
class DBconnector:
def __init__(self, columns=None, values=None):
#connect to db
self.columns = columns
self.values = values
def getvalues(self, table=None, columns=None):
self.values = ("valB1", "valB2")
self.columns = columns
return self
您使用 columns
和 values
启动了数据库连接器?连接器应该允许读取和写入数据库,为什么值?如果选择从数据库中读取内容会怎样。连接器中的 table 名称在哪里?原始代码非常混乱,希望您可以将其重构为更具可读性的代码。
对于 Stack Overflow https://whosebug.com/help/mcve 也更容易回答,下次尝试让您的问题更有针对性。
如果只有你的问题而没有代码,我会说创建一个连接器 return 本机数据库查询结果类型,并在 class 之外保留一个单独的函数以将此结果转换为不同的类型(例如元组到字典)。
一般来说,我认为数据库连接的一个非常简单的介绍是 https://dataset.readthedocs.io/en/latest and also https://ponyorm.com 用于快速进入 ORM 领域。