Python基础讲义第二弹面向对象编程(淘宝平台模拟为例)
前言
本文为了深入了解python面向对象的用法, 这里准备了一个淘宝平台的例子
版本1.0
版本1 主要是完成一条完整的订单链模拟, 其他与完整订单链无关的信息不考察在内。
所需背景
1,了解淘宝规则(rule.taobao.com/index.html)
2, 了解基本面向对象的原理和特性.
3, 了解基本逻辑行为.
淘宝用户的相关关系说明
关于淘宝的用户关系, 用下面的一张图描述。 所有的可以在平台上戏耍的都是用户, 游客是非会员用户, 用户是注册买东西的用户, 卖家是卖东西的用户, 最后是平台管理者用户。
用到的知识内容
一、 oop编程三大特性的运用
二、 常见的逻辑处理方法
实例实现和解释
版本1过程说明
在这个过程中 : 一个用户有了浏览行为后进行购买 –>买家付款并下单–> 卖家发货 —> 到买家收到货物确认收货 –>双方互评 —>交易完成。
PS: 省略掉其中不是一条完整订单的行为, 取整个交易过程种,后台的动态链为例,进行模拟说明。在整个过程种尽量对各个对象都模拟出相应的行为。
另外考察买家和买家作用的对象是商品:
增加商品对象(表列)
商品ID, 出售价格。商品参数(product parameters)
'''商品类, 就只有商品ID, 商家, 价格'''
from enum import Enum, unique
@unique
class Goods(Enum): ##商品id\ 卖家对象\ 价格\
good1 = ['093', 'seller1', 397]
good2 = ['116' 'seller1', 597]
good3 = ['081' 'seller1', 299]
good4 = ['116', 'seller1', 198]
'''用户属性类, 参数列表可变'''
class UserInfo():
__slots__ = ('id', 'name', 'adress', 'wallet') # 用tuple定义允许绑定的属性名称
'''用户类'''
class User(object):
__slots__ = ('id', 'info') # 这里的info可以用UserInfo重建和代替,表格联立
def __init__(self, id = None, info = None):
self.id = id;
self.info = info
def setInfo(self, id):#根据用户信息读取信息
info1 = UserInfo()
if(self.id == '001'):
info1.name = 'buyer1'
info1.adress = 'Hubei'
info1.wallet = 10000
else:
if(self.id == '002'):
info1.name = 'null'
info1.adress = 'HeNan'
info1.wallet = 10000
else:
return None
return info1
def scan(self, Goods, time):
self.info = [Goods, self.id, time]
'''游客类对象'''
class Tourist(User):
pass
'''买家类'''
class Buyer(User):
def set_DingDan(self, good1, cout):#订单是由买家生成的 //商品, 购买数量, 传递进来sku—>goodi
print("买家已经拍下")
## DingDan = {'goodsID':Goods.good1.value[0],'mny': cout*(Goods.good1.value[2])}
DingDan = [Goods.good1.value[0],cout*(Goods.good1.value[2])]
self.DingDan = DingDan
def buy(self):
self.info.wallet = self.info.wallet - self.DingDan[1]
if(1): ##这里可以设置一个全局变量生成
print ("生成订单号 xx00100255fdx")
def endDingDan(self):
print("买家确认收货并完成订单")
'''卖家类'''
class Seller(User):
def setGoods(id): ##创建商品
print ('seller1 的 4个sku已经创建完毕')
def sentGoods(self, goods, buyID):
print ('卖家已经发货')
def getMoney(self, mnt):
self.info.wallet = self.info.wallet +mnt
class admin(User):
pass
mnt = 0
DingDan = None
##主函数模拟
s1 = Seller()
s1.id = '002'
s1.info = s1.setInfo(s1.id)
s1.setGoods()
b1 = Buyer()
b1.id = '001'
b1.info = b1.setInfo(b1.id)
b1.set_DingDan(Goods.good1, 2)
mnt = b1.DingDan[1]
s1.sentGoods(Goods.good1, b1.id)
b1.buy() ##付完款
s1.getMoney(mnt)
b1.endDingDan()
很多地方可以优化, 应用一些数据结构对对象进行存储, 同样可以利用mataclass 对相应的表格复写类模块进行一类一表的表达, 这里就不加赘述了, 有兴趣的可以深究下。
版本2.0
引入更多的规则来模拟, 后台对用户的特征行为操作等进行记录。
例如用户进行浏览收藏加够, 加够的商品数, 商品对象(new Class & new SQL)的特征, 店铺是否有优惠, 加入时间因素, 在各个时间段买家的操作平台进行记录和后期复盘。
版本3.0
关键词搜索模拟: 许多用户,通过对应的搜索词进入到对应的URl列表店铺,防真移动端搜索的例子。
版本4.0
直通车决策自动化工具实现
通过直通车模拟得到的规则,直通车操作者进行决策得到最佳的决策方法。
后记
这是个OOP编程较为完整的例子, 剩下的一些版本将会在闲下来的时间里面慢慢完成, 至于版本5 完全实现一个直通车工具, 版本6 提供一个界面化的分析工具也不是不可能, 可以收藏下这篇文章, 在以后会慢慢更新上来。