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

  • 相关阅读:
    Java relection half
    QT学习输入与输出
    FusionCharts(基于Flash的图表工具)使用心得
    测接口遇到的坑
    创建圆
    修改对象属性
    创建直线
    ObjectArx工程配置
    Excel转PDF文件,Excel转TIF文件
    创建多段线
  • 原文地址:https://www.cnblogs.com/actanble/p/6713429.html
Copyright © 2020-2023  润新知