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 提供一个界面化的分析工具也不是不可能, 可以收藏下这篇文章, 在以后会慢慢更新上来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值