ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

类中反射的应用

2021-09-23 22:02:39  阅读:174  来源: 互联网

标签:count 反射 fields self __ 应用 id 类中 row


#利用反射,构造对象
#反射取值可以不全取fileds中的键,只取部分
class UpDownModel(object):
fields = {
"id": "ID",
"choice": "赞或踩", # 1,表示是赞;0,表示是踩
}

def __init__(self, row_dict):
for k in self.fields:
setattr(self, k, row_dict.get(k)) #.get取值
# self.id = row_dict.get("id")
# self.choice = row_dict.get("choice")

#调用UpDownModel对象
def fetch_up_down(user_id, aid):
with Connect() as conn:
sql = "select id,choice from up_down where user_id=%s and article_id=%s"
result = conn.fetch_one(sql, user_id, aid)
if result:
return UpDownModel(result)
#反射取值可以不全取fileds中的键,只取部分
class ArticleModel(object):
fields = {
"title": "标题",
"text": "内容",
"read_count": "阅读数",
"comment_count": "评论数",
"up_count": "赞数",
"down_count": "踩数",
"nickname": "作者",
}

# {"title":xxxx,"text":xxxx,read_count:"xxx"}
def __init__(self, row_dict):
for key in self.fields:
setattr(self, key, row_dict.get(key))
# self.title = row_dict.get("title")
# self.text = row_dict.get("title")

@classmethod
def db_fields(cls):
return ",".join([k for k in cls.fields])

def show(self):
row_display = ["title", 'text']
for k in row_display:
line = "{}:{}".format(self.fields[k], getattr(self, k)) #getattr 取值
print(line)

column_display = ["nickname", "read_count", "comment_count", "up_count", "down_count"]
section_list = []
for k in column_display:
section_list.append("{}:{}".format(self.fields[k], getattr(self, k)))
others = " ".join(section_list)
print(others)

#调用ArticleModel对象
def get_article(article_id):
with Connect() as conn:
sql = """
select
{}
from
article
left join user on article.user_id = user.id
where article.id=%s""".format(ArticleModel.db_fields()) #调用ArticleModel对象
result = conn.fetch_one(sql, article_id)
if not result:
return None
if __name__ == '__main__':
ArticleModel({"title":'xxxx',"text":'xxxx','read_count':"1"}).show()
#未输入的默认为None
# 标题: xxxx
# 内容: xxxx
# 作者: None 阅读数: 1 评论数: None 赞数: None 踩数: None

标签:count,反射,fields,self,__,应用,id,类中,row
来源: https://www.cnblogs.com/LyForeverSun/p/15327655.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有