某市1072家疫情保供企业大数据分析暨颁奖典礼

某市商务委员会刚刚发了个网站(阅读原文),一共列出了1072个保供企业,而且只能用手机看,这哪看得过来?作为IT男,我导出了所有保供企业的清单,并且逐一匹配了这些企业的工商信息,给大家做一个大数据分析,并且冒昧的给这些企业颁个奖。

在这1072家企业中,参加社保的总人数为48529人,当然这只能作为参考,因为大型集团公司的可用人力,会远高于社保参保人数。

在1072个保供企业中,我们发现了非常可喜的现象,某市并不是任由巨型企业垄断的,还有一部分小微企业上榜。其中注册资金小于100万,但实缴资本为0元的企业,一共有57家,其中餐饮企业25家,超市企业15家,电商平台3家(这点钱做不起来电商),副食品7家,药品2家,物流总部3家,外资企业1家。

注册资金、实缴资本均小于100万的企业一共92家,约占某市保供企业总数的9%,他们的注册资金总数为6754万元,实缴资本5724万元,参保人数4456人。

参保人数低于3人的企业,一共130家,占某市保供企业总数的12%,他们的注册资金总数390亿,实缴资本335亿,参保人数40人,也从侧面证明,某市的确是个资本的乐土,130家公司只缴纳了40人的社保,却缴纳了335亿的资本金

蚂蚁奖

蚂蚁是真正的大力士,而某市的保供企业也有这样的大力士,他们以不到10名参保人员、不到100万的实缴资本,成功列入全市1072家的保供企业中!他们的实力不容怀疑

某市1072家疫情保供企业大数据分析暨颁奖典礼

排名第一的是,某市XX贸易经营部!他们以3万元注册资本、0元实缴资本、0参保人数,成功入围某市保供企业,获得蚂蚁奖第一名!大家鼓掌!这家公司的法人代表赵总实力雄厚,一共持有三家公司,注册资金分别是10万、3万和1万人民币!

特别指出的,是赵总豪掷1万元,开设了某市宝山区XX烟杂店!有效缓解了烟民的焦虑,提出表扬!

某市1072家疫情保供企业大数据分析暨颁奖典礼

排名第二的是,某市XX农副产品市场经营管理有限公司,他们以3万元注册资本、3万元实缴资本、0参保人数,获得蚂蚁奖第二名!致敬!

特别指出的是,这家公司的经营范围,是为本市场内农副产品经营者提供管理服务,本身并不具备副食品销售的资格;市场内的商户,能否挂靠在该公司名下提供保供服务,组委会无法了解;市场管理公司是否有充足人力核查供应商的健康情况,组委会也无法了解,但是我们相信某市评选出来的保供企业,一定全是有实力的企业!

排名第三的是,广东XX食品股份有限公司某市分公司,他们以0元资本,3参保人数,获得蚂蚁奖第三名!而这家公司先后被某市处罚了三次,包括虚假广告和虚假标注食品生产日期,但是他们能够成功入围,就说明他们改过自新了!

某市1072家疫情保供企业大数据分析暨颁奖典礼

排名第四的是,某市XX物流有限公司,注册资金50万,实缴资本50万,参保人数1人。这家公司的老板名下有两家公司,一家成立于2021年10月19日,注册资金200万;而本次入围的公司,注册资金只有50万,1人参保,想必这个人是个多面手吧,要不然又如何能入围呢?

某市1072家疫情保供企业大数据分析暨颁奖典礼

排名第五的是,某市XX贸易有限公司,这家公司是一人公司,注册资金20万,实缴资本0元,参保人数0人,属于小规模纳税人,能列入保供企业,想必有自己独到的优势。

最具潜力小新人奖

接下来我们颁布的是最具潜力小新人奖,他们成立不到一年,就能以不到100万的注册资本、0名参保人数,成功在超市商贸、电商平台、餐饮企业、零售药品四大领域,进入某市保供企业名单!他们是:

某市1072家疫情保供企业大数据分析暨颁奖典礼

但排名第一的是,某市XX农特产有限公司,这家公司成立于2022年1月4日,注册资金300万,实缴资金0元,参保人数0人,就能成功作为电商平台入围某市保供企业!曾给闵行捐菜,点赞

更令人震惊的是,这家公司并不是背后有大树的公司,而是两个自然人联合成立的小公司!这家公司开业不到4个月,就被澎湃新闻报道,大家请看报道详情《万人团购被指不发货不退款 涉及金额超过300万》,因选的物流没派送导致

某市1072家疫情保供企业大数据分析暨颁奖典礼

所以,这家公司被组委会授予最佳新人奖,名至实归。

另外,某市XX商贸有限公司,成立于2021年12月27日,注册资金100万,实缴0元,参保0人,便能纳入闵行区的保供企业名单,公司年龄同样不到4个月。

我狠狠批评了一下小奶猫球球,看你3个月大,现在除了吃喝睡加卖萌,别的什么都不会;你看看这些新公司,不到4个月大,都上了某市保供企业的光荣榜了!但球球跟我喵了一声,他敢骂我荒喵

某市1072家疫情保供企业大数据分析暨颁奖典礼

不务正业奖

某市XX净生物技术有限公司,成立于2021年11月22日,注册资金2000万,实缴资金0元,社保0人,但是这家生物技术公司成功入围了某市保供企业超市商贸组!与他同行的巨无霸相比,这家新生企业毫不逊色。

二等奖,是某市XX茶点餐饮管理有限公司,注册资金200万,实缴资本0元,社保0人,但是这家餐饮管理公司,也成功入围了某市某市保供企业超市商贸组!其实这家公司是一等奖的有力竞争对手,但是餐饮离超市更近,生物技术离超市更远,所以不务正业奖颁发给了某市XXX生物技术有限公司!

三等奖,是某市金山区的某市XX医疗科技中心,注册资金100万,实缴100万他们纳入了零售药品组,但是他们的经营范围,竟然还有食品经营,而且是某市金山市场监督管理局发证的,所以,他们荣获了第三名!

某市1072家疫情保供企业大数据分析暨颁奖典礼

四等奖,是某市杨浦区XXX智慧助老服务中心,注册资本5000元(没错,0.5万),经营范围是「开展科技助老的咨询及调研,推进科技助老项目的实施及应用;承接政府相关委托项目」,但是也入围了餐饮企业组,完全脱离了经营范围,组委会不知道这个保供企业是如何确定的。但是有一说一,这家企业至少一直在招餐厅厨师,应该至少能满足500人的食品需求吧。

某市1072家疫情保供企业大数据分析暨颁奖典礼

城市特色奖

XX川咖啡(某市)有限公司,成立于2021年8月19日,注册资金1000万,实缴资本0元,社保0人,能够作为一个单品,杀入某市保供企业目录,成为六家咖啡保供企业中的一员,跟星巴克、拉比卡、皮氏咖啡并列,这是何等的城市特色!

某市1072家疫情保供企业大数据分析暨颁奖典礼

在六家咖啡企业中,他是当之无愧的城市特色奖。当然,除了XX川咖啡,还有长沙XX半咖啡,都是注册资金不高、实缴资金为零,参保人数为零的企业,所以,长沙XX半咖啡,理所应当获得二等奖。

除了咖啡,还有鞋子。得物作为电商平台上榜,如果我没记错,得物是卖潮鞋的,我还在上面买过AJ,但是现在某市正在封控,万万没想到竟然还有买潮鞋的需求?如果不是穿给大白看,那就是穿给方舱的病友看吧?毕竟有人在方舱开始谈恋爱了。

某市1072家疫情保供企业大数据分析暨颁奖典礼

既往不咎奖

一等奖,某市XXX绿色食品发展有限公司,这家公司在2019年4月26日,被最高人民法院公示为失信公司,而且有200条风险,这样的企业能够入围保供名单,说明某市有关部门本着治病救人,既往不咎的原则选择了保供企业。

某市1072家疫情保供企业大数据分析暨颁奖典礼

二等奖,某市XX副食品有限公司,这家公司的实际控制人是公示的老赖,被限制高消费,而且目前尚未执行法院裁定。当然,魔都还是要既往不咎嘛。

某市1072家疫情保供企业大数据分析暨颁奖典礼

节约资金奖

XXX源(某市)企业发展有限公司,注册资金3000万,实缴资本1.85万,参保人员两名,入围保供超市商贸组。我注意到这家公司,是因为他在缴纳实缴资本的企业里面,实缴资本是最低,只有1.85万元,额……

某市XX坊餐饮有限公司,这家公司像是未卜先知一样,在2022年1月24日,完成了注册资本金变更,把原来的100万注册资本,变更到了3800万注册资本;当然实缴资本和参保人数还是0,恩。

某市1072家疫情保供企业大数据分析暨颁奖典礼

组委会没什么好说的。

东西合璧奖

XX商贸(某市)有限公司,入围外资企业保供名单,但是这家公司注册资金用的是人民币,而且只有100万,还是一个自然人独资的有限责任公司,不知道某市有关部门是如何认定外资企业的,这种工作细致程度,佩服。

某市1072家疫情保供企业大数据分析暨颁奖典礼

多才多艺奖

某市稷良食品有限公司,即是超市商超类企业,又是外资企业,也是整个1072家保供企业里面的独一份,可能是讨个社稷良心的好彩头吧?

某市1072家疫情保供企业大数据分析暨颁奖典礼

马虎大意奖

这个奖,要颁布给组织保供入围工作的某市商务委员会,因为他们写错了40家入围企业的名字,错误率达到4%,让我花费了大量时间去矫正数据。

有错别字的,比如某市常林汽车运费有限公司,某市鑫欣源()副食品有限公司,某市长宁唐宫海鲜坊()有限公司,猪和萝卜(某市)餐饮管理~~公司~~有限公司,某市又一村(春)农贸市场经营管理有限公司;

有缺字的,比如「杭州可靠护理用品」应该是「杭州可靠护理用品股份有限公司」;有多字的,比如「某市云丰国际物流(某市)有限公司」应该是「云丰国际物流(某市)有限公司」;

还有名字全部搞错的,比如某市七宝商城农产品交易市场、某市江杨农产品批发市场这种,一共24个,全名都应该是XX市场经营管理有限公司。

你说如果真的执行了,发现企业公章跟保供企业名单上的名称不符,结果物流车辆/人员又被居委、社区拦住了,这不是耽误事儿么?

错误名单如下,还是友情建议某市商务委员会尽快修改一下,知道大家抢菜很累,但是核心大事不能出错啊!何况还是错了40个企业名字……

超市商贸 杭州娃哈哈集团有限公司某市分公司
超市商贸 某市爱婴室商务服务有限公司
超市商贸 某市全球儿童用品有限公司
超市商贸 某市笑昕食品有限公司
超市商贸 某市依牛羊食品有限公司
超市商贸 杭州可靠护理用品
电商平台 某市悠乐汇企业管理咨询有限公司
零售药品 某市万仕诚国药(药业)制品有限公司
外资企业 爱德华(某市)医疗用品公司
物流总部 某市晶粮实业(集团)股份有限公司
物流总部 某市鑫欣源副食品有限公司
物流总部 某市常林汽车运费有限公司
物流总部 某市云丰国际物流(某市)有限公司
餐饮企业 某市鑫博海农副畜产品加工有限公司
餐饮企业 某市龙神食品(集团)有限公司
餐饮企业 领驰食品发展(某市)有限公司
餐饮企业 某市长宁唐宫海鲜坊有限公司
餐饮企业 猪和萝卜(某市)餐饮管理公司有限公司
餐饮企业 某市煜盐餐饮有限公司
副食品 中粮家佳康(江苏)公司某市分公司
副食品 某市江桥批发市场
副食品 某市西郊国际农产品交易中心
副食品 某市拾分味道食品(集团)有限公司
副食品 某市国京农贸综合市场经营管理有限公司
副食品 某市申象农贸市场管理有限公司
副食品 某市又一村农贸市场经营管理有限公司
副食品 某市农产品中心批发市场
副食品 某市江杨农产品批发市场
副食品 某市江阳水产品批发交易市场
副食品 某市七宝商城农产品交易市场
副食品 某市浦南农副产品批发市场
副食品 某市东方国际水产中心市场
副食品 某市龙上农副产品批发市场
副食品 某市辉展果蔬市场
副食品 某市胜辛集贸市场
副食品 某市陇南肉类批发市场
副食品 某市新安农副产品市场
副食品 某市三林副食品批发交易市场
副食品 某市军工路国太综合市场
副食品 某市江杨水产批发交易市场
副食品 某市青莲上选食品公司

某市商务委员会发布的《疫情防控生活物资保障企业查询库》,入口在这里,请感兴趣的同学查收。我的数据时间是4月21日14点,当时还是1072家,目前某市保障企业已经变成1124家了,不过大数据分析还是有借鉴意义的。

某市1072家疫情保供企业大数据分析暨颁奖典礼

感觉我每天都在封号的边缘疯狂试探,但我保证,我写的每篇文章,都有国家机关公开信源的数据支持。只要某市不再出新的魔幻事件,我保证我马上就不写某市了。

转自:https://mp.weixin.qq.com/s/2QdJhPA7m8HE46NXfSARig

改变 Python 对象规则的黑魔法 Metaclass

今天小明哥要分享的主题是:改变类定义的神器-metaclass

看到标题,你可能会想改变类的定义有什么用呢?什么时候才需要使用metaclass呢?

今天我将带大家设计一个简单的orm框架,并简单剖析一下YAML这个序列化工具的原理。

Python类的上帝-type

说到metaclass,我们首先必须清楚一个最基础的概念就是对象是类的实例,而类是type的实例,重复一遍:

  1. 对象是类的实例
  2. 类是type的实例

在面向对象的编程模型中,类就相当于一个房子的设计图纸,而对象则是根据这个设计图纸建出来的房子。

下图中,玩具模型就可以代表一个类,而具体生产出来的玩具就可以代表一个对象:

改变 Python 对象规则的黑魔法 Metaclass

总之,类就是创建对象的模板。

而type又是创建类的模板,那么我们就可以通过type创建自己想要的类。

比如定义一个 Hello 的 class:

class Hello(object):
    def hello(self, name='world'):
     print('Hello, %s.' % name)

当 Python 解释器载入 hello 模块时,就会依次执行该模块的所有语句,执行结果就是动态创建出一个 Hello 的 class对象。

type()函数既可以查看一个类型或变量的类型,也可以根据参数创建出新的类型,比如上面那段类的定义本质上就是:

def hello(self, name='world'):
    print('Hello, %s.' % name)
Hello = type('Hello', (object,), dict(hello=hello))

type()函数创建class 对象,依次传入 3 个参数:

  • class 类的名称;

  • 继承的父类集合,注意 Python 支持多重继承,如果只有一个父类,别忘了 tuple 的单元素写法;

  • class 的方法名称与函数绑定以及字段名称与对应的值,这里我们把函数 fn 绑定到方法名 hello 上。

通过 type() 函数创建的类和直接写 class 是完全一样的,因为 Python 解释器遇到 class 定义时,仅仅是扫描一下class 定义的语法,然后调用 type() 函数创建出 class。

正常情况下,我们肯定都是用 class Xxx… 来定义类,但是type() 函数允许我们动态创建出类来,这意味着Python这门动态语言支持运行期动态创建类。你可能感受不到这有多强大,要知道想在静态语言运行期创建类,必须构造源代码字符串再调用编译器,或者借助一些工具生成字节码实现,本质上都是动态编译,会非常复杂。

metaclass到底是什么

那type和metaclass有什么关系呢?metaclass到底是什么呢?

我认为metaclass 其实就是type或type的子类,通过继承type,重载__call__运算符,便可以在class类对象创建时作出一些修改。

对于类 MyClass:

class MyClass():
 pass

其实相当于:

class MyClass(metaclass = type):
 pass

一旦我们把它的 metaclass 设置成 MyMeta:

class MyClass(metaclass = MyMeta):
 pass

MyClass 就不再由原生的 type 创建,而是会调用 MyMeta 的__call__运算符重载。

class = type(classname, superclasses, attributedict) 
## 变为了
class = MyMeta(classname, superclasses, attributedict)

对于具有继承关系的类:

class Foo(Bar):
 pass

Python做了如下的操作:

  • Foo中有__metaclass__这个属性吗?如果是,Python会通过__metaclass__创建一个名字为Foo的类(对象)
  • 如果Python没有找到__metaclass__,它会继续在Bar(父类)中寻找__metaclass__属性,并尝试做和前面同样的操作。
  • 如果Python在任何父类中都找不到__metaclass__,它就会在模块层次中去寻找__metaclass__,并尝试做同样的操作。
  • 如果还是找不到__metaclass__,Python就会用内置的type来创建这个类对象。

假想一个很傻的例子,你决定在你的模块里所有的类的属性都应该是大写形式。有好几种方法可以办到,但其中一种就是通过在模块级别设定__metaclass__:

class UpperAttrMetaClass(type):
    ## __new__ 是在__init__之前被调用的特殊方法
    ## __new__是用来创建对象并返回之的方法
    ## 而__init__只是用来将传入的参数初始化给对象
    ## 你很少用到__new__,除非你希望能够控制对象的创建
    ## 这里,创建的对象是类,我们希望能够自定义它,所以我们这里改写__new__
    ## 如果你希望的话,你也可以在__init__中做些事情
    ## 还有一些高级的用法会涉及到改写__call__特殊方法,但是我们这里不用
    def __new__(cls, future_class_name, future_class_parents, future_class_attr):
        ##遍历属性字典,把不是__开头的属性名字变为大写
        newAttr = {}
        for name,value in future_class_attr.items():
            if not name.startswith("__"):
                newAttr[name.upper()] = value

        ## 方法1:通过'type'来做类对象的创建
        ## return type(future_class_name, future_class_parents, newAttr)

        ## 方法2:复用type.__new__方法,这就是基本的OOP编程
        ## return type.__new__(cls, future_class_name, future_class_parents, newAttr)

        ## 方法3:使用super方法
        return super(UpperAttrMetaClass, cls).__new__(cls, future_class_name, future_class_parents, newAttr)


class Foo(object, metaclass = UpperAttrMetaClass):
    bar = 'bip'

print(hasattr(Foo, 'bar'))
## 输出: False
print(hasattr(Foo, 'BAR'))
## 输出:True

f = Foo()
print(f.BAR)
## 输出:'bip'

简易ORM框架的设计

ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。

现在设计一下ORM框架的调用接口,比如用户想通过User类来操作对应的数据库表User,我们期待他写出这样的代码:

class User(Model):
    ## 定义类的属性到列的映射:
    id = IntegerField('id')
    name = StringField('username')
    email = StringField('email')
    password = StringField('password')

## 创建一个实例:
u = User(id=12345, name='xiaoxiaoming', email='test@orm.org', password='my-pwd')
## 保存到数据库:
u.save()

上面的接口通过常规方法很难或几乎很难实现,但通过metaclass就会相对比较简单。核心思想就是通过metaclass修改类的定义,将类的所有Field类型的属性,用一个额外的字典去保存,然后从原定义中删除。对于User创建对象时传入的参数(id=12345, name=’xiaoxiaoming’等)可以模仿字典的实现或直接继承dict类保存起来。

其中,父类Model和属性类型StringFieldIntegerField是由ORM框架提供的,剩下的魔术方法比如save()全部由metaclass自动完成。虽然metaclass的编写会比较复杂,但ORM的使用者用起来却异常简单。

首先定义Field类,它负责保存数据库表的字段名和字段类型:

class Field(object):

    def __init__(self, name, column_type):
        self.name = name
        self.column_type = column_type

    def __str__(self):
        return '<%s:%s>' % (self.__class__.__name__, self.name)

在Field的基础上,进一步定义各种类型的Field,比如StringField,IntegerField等等:

class StringField(Field):

    def __init__(self, name):
        super(StringField, self).__init__(name, 'varchar(100)')

class IntegerField(Field):

    def __init__(self, name):
        super(IntegerField, self).__init__(name, 'bigint')

下一步,编写ModelMetaclass:

class ModelMetaclass(type):

    def __new__(cls, name, bases, attrs):
        if name == 'Model':
            return type.__new__(cls, name, bases, attrs)
        print('Found model: %s' % name)
        mappings = dict()
        for k, v in attrs.items():
            if isinstance(v, Field):
                print('Found mapping: %s ==> %s' % (k, v))
                mappings[k] = v
        for k in mappings.keys():
            attrs.pop(k)
        attrs['__mappings__'] = mappings  ## 保存属性和列的映射关系
        attrs.setdefault('__table__', name) ## 当未定义__table__属性时,表名直接使用类名
        return type.__new__(cls, name, bases, attrs)

以及基类Model:

class Model(dict, metaclass=ModelMetaclass):

    def __init__(self, **kw):
        super(Model, self).__init__(**kw)

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Model' object has no attribute '%s'" % key)

    def __setattr__(self, key, value):
        self[key] = value

    def save(self):
        fields = []
        params = []
        args = []
        for k, v in self.__mappings__.items():
            fields.append(v.name)
            params.append('?')
            args.append(getattr(self, k, None))
        sql = 'insert into %s (%s) values (%s)' % (self.__table__, ','.join(fields), ','.join(params))
        print('SQL: %s' % sql)
        print('ARGS: %s' % str(args))

ModelMetaclass中,一共做了几件事情:

  1. 在当前类(比如User)中查找定义的类的所有属性,如果找到一个Field属性,就把它保存到一个__mappings__的dict中,同时从类属性中删除该Field属性(避免实例的属性遮盖类的同名属性);
  2. 当类中未定义__table__字段时,直接将类名保存到__table__字段中作为表名。

Model类中,就可以定义各种操作数据库的方法,比如save()delete()find()update等等。

我们实现了save()方法,把一个实例保存到数据库中。因为有表名,属性到字段的映射和属性值的集合,就可以构造出INSERT语句。

测试:

u = User(id=12345, name='xiaoxiaoming', email='test@orm.org', password='my-pwd')
u.save()

输出如下:

Found model: User
Found mapping: id ==> <IntegerField:id>
Found mapping: name ==> <StringField:username>
Found mapping: email ==> <StringField:email>
Found mapping: password ==> <StringField:password>
SQL: insert into User (id,username,email,password) values (?,?,?,?)
ARGS: [12345, 'xiaoxiaoming''test@orm.org''my-pwd']

测试2:

class Blog(Model):
    __table__ = 'blogs'
    id = IntegerField('id')
    user_id = StringField('user_id')
    user_name = StringField('user_name')
    name = StringField('user_name')
    summary = StringField('summary')
    content = StringField('content')


b = Blog(id=12345, user_id='user_id1', user_name='xxm', name='orm框架的基本运行机制', summary="简单讲述一下orm框架的基本运行机制",
         content="此处省略一万字...")
b.save()

输出:

Found model: Blog
Found mapping: id ==> <IntegerField:id>
Found mapping: user_id ==> <StringField:user_id>
Found mapping: user_name ==> <StringField:user_name>
Found mapping: name ==> <StringField:user_name>
Found mapping: summary ==> <StringField:summary>
Found mapping: content ==> <StringField:content>
SQL: insert into blogs (id,user_id,user_name,user_name,summary,content) values (?,?,?,?,?,?)
ARGS: [12345, 'user_id1''xxm''orm框架的基本运行机制''简单讲述一下orm框架的基本运行机制''此处省略一万字...']

可以看到,save()方法已经打印出了可执行的SQL语句,以及参数列表,只需要真正连接到数据库,执行该SQL语句,就可以完成真正的功能。

YAML序列化工具的实现原理浅析

YAML是一个家喻户晓的 Python 工具,可以方便地序列化 / 逆序列化结构数据。

官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation

安装:

pip install pyyaml

YAMLObject 的任意子类支持序列化和反序列化(serialization & deserialization)。比如说下面这段代码:

import yaml


class Monster(yaml.YAMLObject):
    yaml_tag = '!Monster'

    def __init__(self, name, hp, ac, attacks):
        self.name = name
        self.hp = hp
        self.ac = ac
        self.attacks = attacks

    def __repr__(self):
        return f"{self.__class__.__name__}(name={self.name}, hp={self.hp}, ac={self.ac}, attacks={self.attacks})"


monster1 = yaml.load("""
--- !Monster
name: Cave spider
hp: [2,6]
ac: 16
attacks: [BITE, HURT]
""")
print(monster1, type(monster1))

monster2 = Monster(name='Cave lizard', hp=[36], ac=16, attacks=['BITE''HURT'])
print(yaml.dump(monster2))

运行结果:

Monster(name=Cave spider, hp=[2, 6], ac=16, attacks=['BITE''HURT']) <class '__main__.Monster'>
!Monster
ac: 16
attacks: [BITE, HURT]
hp: [3, 6]
name: Cave lizard

这里面调用统一的 yaml.load(),就能把任意一个 yaml 序列载入成一个 Python Object;而调用统一的 yaml.dump(),就能把一个 YAMLObject 子类序列化。

对于 load() 和 dump() 的使用者来说,他们完全不需要提前知道任何类型信息,这让超动态配置编程成了可能。比方说,在一个智能语音助手的大型项目中,我们有 1 万个语音对话场景,每一个场景都是不同团队开发的。作为智能语音助手的核心团队成员,我不可能去了解每个子场景的实现细节。

在动态配置实验不同场景时,经常是今天我要实验场景 A 和 B 的配置,明天实验 B 和 C 的配置,光配置文件就有几万行量级,工作量不可谓不小。而应用这样的动态配置理念,就可以让引擎根据配置文件,动态加载所需要的 Python 类。

对于 YAML 的使用者也很方便,只要简单地继承 yaml.YAMLObject,就能让你的 Python Object 具有序列化和逆序列化能力。

据说即使是在大厂 Google 的 Python 开发者,发现能深入解释 YAML 这种设计模式优点的人,大概只有 10%。而能知道类似 YAML 的这种动态序列化 / 逆序列化功能正是用 metaclass 实现的人,可能只有 1% 了。而能够将YAML 怎样用 metaclass 实现动态序列化 / 逆序列化功能讲出一二的可能只有 0.1%了。

对于YAMLObject 的 load和dump() 功能,简单来说,我们需要一个全局的注册器,让 YAML 知道,序列化文本中的!Monster需要载入成 Monster 这个 Python 类型,Monster 这个 Python 类型需要被序列化为!Monster标签开头的字符串。

一个很自然的想法就是,那我们建立一个全局变量叫 registry,把所有需要逆序列化的 YAMLObject,都注册进去。比如下面这样:

registry = {}
 
def add_constructor(target_class):
    registry[target_class.yaml_tag] = target_class

然后,在 Monster 类定义后面加上下面这行代码:

add_constructor(Monster)

这样的缺点很明显,对于 YAML 的使用者来说,每一个 YAML 的可逆序列化的类 Foo 定义后,都需要加上一句话add_constructor(Foo)。这无疑给开发者增加了麻烦,也更容易出错,毕竟开发者很容易忘了这一点。

更优雅的实现方式自然是通过metaclass 解决了这个问题,YAML 的源码正是这样实现的:

class YAMLObjectMetaclass(type):
    def __init__(cls, name, bases, kwds):
        super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds)
        if 'yaml_tag' in kwds and kwds['yaml_tag'is not None:
            cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml)
            cls.yaml_dumper.add_representer(cls, cls.to_yaml)
    ## 省略其余定义
 
class YAMLObject(metaclass=YAMLObjectMetaclass):
    yaml_loader = Loader
    yaml_dumper = Dumper
    ## 省略其余定义

可以看到,YAMLObject 把 metaclass 声明成了 YAMLObjectMetaclass,YAMLObjectMetaclass则会改变YAMLObject类和其子类的定义,就是下面这行代码将YAMLObject 的子类加入到了yaml的两个全局注册表中:

cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml)
cls.yaml_dumper.add_representer(cls, cls.to_yaml)

YAML 应用 metaclass,拦截了所有 YAMLObject 子类的定义。也就是说,在你定义任何 YAMLObject 子类时,Python 会强行插入运行上面这段代码,把我们之前想要的add_constructor(Foo)add_representer(Foo)给自动加上。所以 YAML 的使用者,无需自己去手写add_constructor(Foo)add_representer(Foo)

总结

这次分享主要是简单的浅析了 metaclass 的实现机制。通过实现一个orm框架并解读 YAML 的源码,相信你已经对metaclass 有了不错的理解。

metaclass 是 Python 黑魔法级别的语言特性,它可以改变类创建时的行为,这种强大的功能使用起来务必小心。

看完本文,你觉得装饰器和 metaclass 有什么区别呢?欢迎下方留言和我讨论。记得一键三连呦,笔芯!

改变 Python 对象规则的黑魔法 Metaclass

转自:https://mp.weixin.qq.com/s/Ls2UP7Zh4f4dIrf38IVDQA

上海的保供名单里,怎么出现了那么多垃圾企业?!

首先声明:暴露的问题越多,不仅不丢人,反而是一种进步

 

就如同,欧美国家的民众抗议全球第一。

 

真正可怕的,不是暴露问题,而是静悄悄!

 

1
特供名单

上海的劣质保供物资,情况愈演愈烈,已经造成重大的舆论影响

 

为勇敢的上海人点赞!!

上海的保供名单里,怎么出现了那么多垃圾企业?!

这些劣质物质,大都是保供企业提供的。

 

保供企业,是上海政府指定的特许经营企业,专门负责上海的物资供应和配送。企业名单是公开可查询的,公布在上海商务委员会的官方公众号“上海商务”。

 

上海的保供名单里,怎么出现了那么多垃圾企业?!

上海的保供名单里,怎么出现了那么多垃圾企业?!

保供企业一共1070家,分成了7个种类,我只查询了“餐饮企业”和“零售药品流通”这两个门类。

 

从三个维度考察基本情况:

1、实缴资本是不是0?

2、参保人员是不是0?

3、经营资质许可证有没有过期?

本来还想查一查司法诉讼情况,但个人精力有限,就舍掉了。

所谓“三无”企业:无资金、无人员、无资质。满足前两个条件的任何一个,就可以说是空壳公司或皮包公司;存在第三个条件,那就是无良企业。

总之,都在垃圾企业之列。

 

不查不知道,一查吓一跳。

 

2
餐饮企业

“餐饮企业”一共268家。那些熟悉的、有名的企业,比如百盛、棒约翰、金拱门,我们直接略过,只查那些名字听都没听过、名字很奇怪的企业

 

第一个被我抓到的是,上海荷源餐饮管理有限公司

 

实缴资本是0,参保人员只有4人。

 

上海的保供名单里,怎么出现了那么多垃圾企业?!

食品经营许可证的有效期是2019年10月,已经过期两年半了

上海的保供名单里,怎么出现了那么多垃圾企业?!

还有更刷新下限的,这家企业从2016年成立开始,作为被告的司法案件就没断过,现在股权还被冻结着

你很难找到比它还差的企业!

 

这样的企业生产出来的餐饮食品,跟投毒会有本质区别吗?

 

上海有料餐饮管理有限责任公司,实缴资本是0,参保人员只有4人。

上海瀛佳餐饮管理有限公司,不存在食品经营许可证过不过期的问题,因为它压根就没办这个证,参保人员只有1人。

上海鼎颢餐饮有限公司,参保人员0,食品经营许可证已经过期。

最搞笑的是,上海沪恩膳餐饮管理有限公司,这名字起得多么感天动地,意思是给上海施恩,但是它做得最过分:

实缴资本0,参保人员0,从来没有办理食品经营许可证。

 

上海顺好餐饮管理有限公司,实缴资本0;

 

上海潾源餐饮服务有限公司,实缴资本0

我这查了大概20家企业,就已经有7家“中奖”的,概率超过了1/3!

后面我不查了,大家自己去翻吧,就是只要你觉得公司名字从没见过听过的,一查就容易出点问题。

我还发现个神奇的事情,上海丰裕餐饮管理有限公司鲁班路分公司,实缴资本和参保人员都是0;但上海丰裕餐饮管理有限公司看起来还算正常。这就奇了怪了:

 

你不采用信誉更好、实力更强的母公司,偏偏要选一个问题重重的分公司!

 

有受虐症吗?

3
药企

药企一共73家。

 

第一个被我抓到的,上海泉源堂智慧药房有限公司。去年才成立,实缴资本和参保人员都是0.

上海的保供名单里,怎么出现了那么多垃圾企业?!

上海真仁堂药业有限公司,实缴资本0,药品经营许可证已经过期1年。

 

上海海吉雅医药有限公司,实缴资本0。

上海仁携大药房连锁有限公司,实缴资本和参保人员都是0。

上海高济智慧药房有限公司,实缴资本和参保人员都是0。

急尼优智慧药房(上海)有限公司,实缴资本和参保人员都是0。

上海众缘健大药房连锁有限公司,实缴资本0。

保供的药企情况比餐饮行业要好一点,但这毕竟是药企啊。

劣质食品与劣质药品,对身体的危害哪个更大?

 

73家药企如果从头到尾查一遍,我估计会有20家左右存在问题。

 

4
黑心企业

有这么多问题企业来保供,居民收到的物资怎么可能没问题呢?

我在上海,今天早上一起床,就发现朋友圈有很多人在晒伪劣物资。

仿佛有人组织,大家一起商量好似的。

我随便截几个图给大家看看。

 

上面那位是某券商的首席研究,下面是某金融机构的富二代女。

上海的保供名单里,怎么出现了那么多垃圾企业?!

某大律所的合伙人:

 

上海的保供名单里,怎么出现了那么多垃圾企业?!

连这些有钱人都中枪,就不用说其他人了。

 

最令我感到惊讶的是,浦东洋泾街道也“遭迫

上海的保供名单里,怎么出现了那么多垃圾企业?!

洋泾街道在哪里?黄浦江边、紧挨着陆家嘴,绝对寸土寸金的黄金地带!连洋泾街道收到的物资都不忍直视,何况是其他地区?!

上海的保供名单里,怎么出现了那么多垃圾企业?!

上海假劣物资的触目惊心,我点到即止,现在新闻陆陆续续报道出来,大家可以自行网上搜索。

 

上海不缺好物资,这从辽宁省委针对上海的辟谣中就可以看出来;

 

上海不缺好配送,这从京东的“自杀式物流”就可以看出来;

 

保供名单里也不缺好企业,京东、沃尔玛、永辉、美团……。

 

但是,那些伪劣物资是怎么送到上海的千家万户呢?

 

啥也不说了,用诺贝尔经济学奖获得者米塞斯的一句话作为结尾吧:

如果在撒哈拉沙漠里实行计划经济,沙子都会短缺。

 

上海的保供名单里,怎么出现了那么多垃圾企业?!

转自:https://mp.weixin.qq.com/s/6JlLw1nhvFzxnaBAw9yWhg

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

来源/无相财经(ID:wuxiangcj

大鱼吃小鱼,小鱼吃虾米,这是生物圈的法则。
而现在的上海,出现了三种人。
吃人的小虾米,吃人的食人鱼,吃人的大白鲨。
他们是怎么“吃人“的?今天就对最近上海的魔幻新闻,做个总结。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

第一种吃人的,是在疫情中利用居民出不了小区,买不了菜的窘境恶意提价的人。
前几天,一位在上海的小姑娘可能是饿坏了,找了骑手买了20个鸡蛋和6桶方便面。
谁曾想骑手小哥狮子大开口,要价900元。
其中包括代买费570元和跑腿费330元。而两人之前商定的价格,仅仅是270元。
20个鸡蛋加6桶方便面,平日里,不会超过70块钱吧?
270元的价格,姑娘认了,但没想到,“小虾米“愣是能抬到900元!
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
女孩提出要看小票,表示不相信,骑手说没有,女孩又慌又怕,报了警。
警察了解情况后,问骑手,票呢?
骑手支支吾吾说本来就没小票,警察一番仗义执言,怼得骑手说不出话来。
之后骑手恼羞成怒,说不送了,并想要跑腿费。
这时,警察则要求他提供工作证件,男子拿出假证后,被当场识破,最后将钱返还给了女子,而骑手小哥被传唤带走。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
后来,警方对该骑手进行调查,发现他从疫情爆发以来,就通过平台接单、小区蹲点、朋友介绍等方式,在跑腿费和代买费上宰了不少被封住脚步的客人,非法牟利2万多,现在已对其采取刑事强制措施。
一个没有骑手资质的人,冒充骑手,一单就能赚大几百。
一天呢?上万了吧。
况且这还是被逮到的,那些没被逮到的呢?

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

第二种吃人的,是通过特殊渠道,特殊资源,倒买倒卖,哄抬物价的人。
昨天,上海警方发布通告,处理了一个倒买倒卖的人。
这个人短短一周就赚了150万!
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
175万的销售额,150万的利润,利率高达600%!
毒贩子看了沉默,高利贷看了流泪。
马克思看了,想修改一下资本论里的说法——当利润达到300%时,甚至连上绞刑架都毫不畏惧。
在马克思看来利润高达300%,资本家就已经不怕死了。
现在这个高某轻轻松松搞了600%,而且还不用死,仅仅是租了别人的食品经营营业执照,就搞了那么多的钱,他当然敢那么干。
值得注意的是,他还只是个人单干,不涉及公司。
那么,其他那些自己有证,有资源的呢,公司化运营的呢?
前几天,上海梅陇镇的乳头肉,就上了热搜。
群众反映,好不容易等来的物资,竟然全是不能吃的乳头肉。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
刚开始,我还有点不相信,觉得这种肉,是流入不到市场的。
因为猪奶头部位有很多腺体,一般是不能吃的,基本当湿垃圾。
检疫总局也规定宰杀分割生猪后,必须对猪乳头进行修割,所以菜市场基本买不到这种肉。
这不活生生残害群众吗? 
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
现在事情水落石出了,有关部门承认,部分猪肉确实存在质量问题,并启动相关调查问责程序”。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
按照官方的说明,是镇政府的供应商动了手脚,把协议约定的五花肉(2斤)、蹄髈(1斤)换成了猪废料。
镇政府把相关企业已被列入黑名单,换新的供应商。
那么问题来了:
1、梅陇镇是怎么做事前准备的,难道不去走访企业,不详细审核,就随意签合同了?
2、供应商的选择采用的是什么办法,有没有按照程序招标?
昨天,事情水落石出了。
上海警方查明,闵行区梅陇镇政府出资760万元招标买猪肉,结果中标公司用300万元去买劣质猪肉,一下子净赚460万!
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币! 
而上海梅陇镇两干部也因为劣质猪肉事件被免职。
其中一个是副镇长,一个是经发办主任。
没有背景的食人鱼小口吃人,有背景有关系的食人鱼大口吃人!
通常而言,保供单位的选择,一般都要找有货源、有能力、信誉好的大企业。
在上海,为什么有那么多的皮包公司,成了保供单位?

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

几十万、几百万,以上这些,还都是赚的小钱。
接下来,我想谈谈挣得多的,大白鲨级别的。
我们知道,在这次上海的疫情中,一些以京东为代表的大物流公司,在送货的路上,屡遭物业、卡口刁难。
说不是保供单位,不让送。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
运货司机,有时候也是有去无回。以至于大量的菜都烂掉,都送不到居民手里。
是谁在阻碍物流,阻碍这些援助上海的物资?
为什么老百姓很难抢到平价菜,而涨了价的高价菜就很容易买到?

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!

上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
再次,我之前说过,倒买倒卖、哄抬物价,相对而言只能说是小财。
大财是什么?
前两天,王思聪怒怼连花清瘟,冲上热搜。
4月12日,云南紧急拨付了6600万援助上海疫情,其中1600万采购物资,1000万元采购蔬菜。
其余的4000万元都是用来采购中成药……说实话,我不是很理解这波操作。
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
这几天,我看到最多的新闻,就是在上海这座城市,有人拿着疫情当提款机,拿人民当人民币!
上海封控20天了。
这20天,有多少人在忍受高价的食物。忍受发不出工资,和收不到工资的窘境。
很多人被迫无奈,靠网贷活命。
也许,病毒不是最致命的,无限恶意的资本才是最致命的。
最近一个月,他们张着血盆大口,大快朵颐。
而今天,上海已经开始对这些人挨个调查,绳之以法。
我希望,这波重拳应该更猛烈一些,一定要严厉打击上述利用疫情发财的人和企业!
如此,上海才有信心,上海才有希望!
END
上海奸商正被清算:他们拿疫情当提款机,拿人民当人民币!
转自:https://mp.weixin.qq.com/s/2SLf3NOOOCKmxPu1kdD1ww

上海的第六波精彩来了

从昨天晚上到今天下午,一天的时间不到,上海又涌现了更多精彩故事,这些故事来自不同的社区,不同的街道,在不同的人身上发生着,于是上演了一幕幕悲欢离合,让人看得心潮起伏,久久不能平息。

 

作为一个写字者,我又要把这些精彩的故事,用自己的方式记录下来,然后让你们大家看到。

 

昨天最精彩的故事,就是上海和辽宁那事,不少网友表示好奇,为什么辽宁会把证据做得那么严谨,等于是全程预料到了上海方面的反应。

 

今天中午十二点半左右,终于有网友揭开了这个内幕:辽宁的副省长来自上海。

 

上海的第六波精彩来了

 

网友忍不住评价辽宁这一波干得很漂亮。

 

上海的第六波精彩来了

 

 

这个副省长叫周波,来自上海奉贤金汇镇,2019年去的辽宁。

 

上海的第六波精彩来了

 

听了这个内幕后,网友都表示恍然大悟,什么叫知己知彼,这就是了,更逗的是,吉林今天也支援上海了,这次是大米,不走高速,直接走铁路。

 

上海的第六波精彩来了

 

但还是有网友发现了这个,不免令人叹息。

 

上海的第六波精彩来了

 

说到底,都是为了能让上海普通市民吃饱饭,并吃好,而这两天时间,上海普通网友为了一口吃的,真的是操碎了心,比如这个,里面没有菜。

 

上海的第六波精彩来了

 

至于肉,就这一点。

 

上海的第六波精彩来了

 

如果说在吃的方面,有比这更难以忍受的事情,那就是各种过期的,或者是没有资质的食品了,可是偏偏在这方面,也玩出各种花样了。

 

比如有网友反映,嘉兴的叫花鸡送到上海时,一扫码就露出马脚了。

 

上海的第六波精彩来了

 

还有网友发现拿到手的油也很奇怪,下午刚生产,晚上就到网友手里了。

 

上海的第六波精彩来了

 

拿到的咸肉也发绿了。

 

上海的第六波精彩来了

 

以上的种种,还是比不过上海桃浦发的午餐肉里长出了这个。

 

上海的第六波精彩来了

 

有鉴于此,从昨天下午开始,上海普通网友们纷纷在开始相互提醒了,说发下来的盐水鸭和油都不合格。

 

上海的第六波精彩来了

 

在食用油方面,网友点了龙金花这个牌子的名。

 

上海的第六波精彩来了

 

这就是网友拿到的龙金花。

 

上海的第六波精彩来了

 

有网友找到了这个盐水鸭的生产厂商被罚款记录。

 

上海的第六波精彩来了

 

结果这些油和盐水鸭发给了身在洋泾的网友。

 

上海的第六波精彩来了

 

这就是洋泾的网友所领到的物资。

 

上海的第六波精彩来了

 

油出了问题,那盐自然也不能避免,已经有居委会火速发出这样的通知。

 

上海的第六波精彩来了

 

结果有的网友已经吃下去了。

 

上海的第六波精彩来了

 

汤臣四期也没有躲过。

 

上海的第六波精彩来了

 

坐拥千万豪宅的人,在这个时候,终究也抵不过门口的一只酱鸭。

 

上海的第六波精彩来了

 

这是网友找到的记录,相关的风险加起来达到一千多项。

 

上海的第六波精彩来了

 

由此,上海洋泾的网友得出这样的结论。

 

上海的第六波精彩来了

 

这是网友对这批物资的总结,不是三无就是超标,要么实缴资本为零,实在很难令人放心。

 

上海的第六波精彩来了

 

不得不说,上海网友们就是精细,连超标的原文都找到了。

 

上海的第六波精彩来了

 

顺便还普及了一把孔雀石绿对人体的危害。

 

上海的第六波精彩来了

 

网友们还找出了相应的处罚通知书。

 

上海的第六波精彩来了

 

还有网友说自己吃榨菜吃出了钢片。

 

上海的第六波精彩来了

 

 

已经有网友因为吃了这样的东西而拉肚子了。

 

上海的第六波精彩来了

 

网友们也很无奈,因为他们所住的整个街道都是这样的,连洗衣液都有问题。

 

上海的第六波精彩来了

 

连抽纸都缩水四分之三了。

 

上海的第六波精彩来了

 

网友很好奇这些东西在淘宝上都买不到,这到底是从哪里采购来的。

 

上海的第六波精彩来了

 

网友由此得出结论,这发下来的都是伪劣产品。

 

上海的第六波精彩来了

 

这些网友都没有一味的抱怨,也没有一味的等待,而是集体去投诉了。

 

上海的第六波精彩来了

 

事实上,已经有网友吃了酱鸭后,拉肚子了。

 

上海的第六波精彩来了

 

于是因为这事,上海多个居民小区都在紧急回收酱鸭。

 

上海的第六波精彩来了

 

这是古桐四村发的通知。

 

上海的第六波精彩来了

 

就是这样的盐水鸭,已经让多个居民小区的网友中招了。

 

上海的第六波精彩来了

 

这是来自网友的呼声。

 

上海的第六波精彩来了

 

发下来的牙膏和沐浴露则无品牌认证。

 

上海的第六波精彩来了

 

其他街道的网友也很操心,他们发现巴西五花肉的生产日期不对号,都变成下个月的了。

 

上海的第六波精彩来了

 

打浦桥发的腊肠也没有生产日期。

 

上海的第六波精彩来了

 

昨天在山东生产的油,今天就到上海了。

 

上海的第六波精彩来了

 

于是有网友说了这样的话,我都能想象得出,说这话的网友脸上满是苦涩的笑。

 

上海的第六波精彩来了

 

于是有网友苦中作乐之下,这样安慰自己。

 

上海的第六波精彩来了

 

正因为吃的方面牵动人心,毕竟想放心的吃一口真的太难了,所以梅陇镇问题猪肉那事也有新的后续了。

 

上海的第六波精彩来了

 

还有网友透露,医用棉签厂家也出现问题了。

 

上海的第六波精彩来了

上海的第六波精彩来了

上海的第六波精彩来了

上海的第六波精彩来了

上海的第六波精彩来了

 

除了吃的和用的之外,现在方舱也上演魔幻故事了,居然有市民不愿出来了,

不愿出来的是这三个原因。

 

上海的第六波精彩来了

 

由此网友得出这样一个结论。

 

上海的第六波精彩来了

 

还有豆瓣网友得出这样一个结论,上海当下最痛苦的不是富人,也不是穷人,而是中产一族,因为他们的选择成本太高。

 

上海的第六波精彩来了

中产一族固然难过,其他群体也未必好过,像这个网友的朋友,就亲身体验了一回。

 

上海的第六波精彩来了

 

还有网友在抖音上爆料,长宁区市容局的副局长走了,也叫不上救护车,也进不了医院急诊。

 

上海的第六波精彩来了

 

当然,普通上海市民被折腾得更惨,凌晨还在睡梦中,就接到消息,大清早就要排队作检测,这是其中一个小区的通知原文。

 

上海的第六波精彩来了

 

这样太折腾人了,也太容易出问题,于是有上海普通市民不乐意了,理由是活儿做得太不细致了。

 

上海的第六波精彩来了

上海的第六波精彩来了

 

90岁的华东师大退休教授也被折腾得心惊胆战,让人不由感叹,老人何辜,亦复何苦……

 

上海的第六波精彩来了

 

面对这样的情况,知名音乐家谭盾也终于发声了。

 

上海的第六波精彩来了

 

普通市民不好过,在上海的生产企业同样也不好过,比如安森美。

 

上海的第六波精彩来了

 

正所谓物极必反,折腾到极点时,昨天下午终于迎来了好消息,虽然不知是否能实现,但至少能让普通市民松口气了。

 

上海的第六波精彩来了

 

由这个消息,昨天晚上七点半左右,又传来一个消息,上海将试行侧卧式放开。

 

上海的第六波精彩来了

为了能在接下来更好的侧卧式放开,上海还推出了一个新举措。

 

上海的第六波精彩来了

 

还有自媒体给出了相应的数据,加起来差不多700万人了。

 

上海的第六波精彩来了

 

这里不得不佩服上海普通市民的心理素质,虽然日子不是很好过,但他们总能发现新的乐趣,比如这个表情的变化。

 

上海的第六波精彩来了

 

有上海网友则这样自嘲。

 

上海的第六波精彩来了

 

还有上海市民在隔离期间,把打火机拆成这个样子,并提出这样的疑问。

 

上海的第六波精彩来了

 

有网友则改编了这个。

 

上海的第六波精彩来了

 

这是来自网友的解读。

 

上海的第六波精彩来了

 

有网友则把英语单词给玩明白了。

 

上海的第六波精彩来了

上海的第六波精彩来了

 

这大概就是传说中的举一反三了。

 

上海的第六波精彩来了

 

其他网友也不甘示弱,把专业名词给玩明白了。

 

上海的第六波精彩来了

上海的第六波精彩来了

 

这就是所谓的学以致用。

 

上海的第六波精彩来了

 

还有网友则玩起了拆字游戏。

 

上海的第六波精彩来了

 

有网友忍不住感叹道。

 

上海的第六波精彩来了

 

当然在日常的求锤得锤环节中,从来不缺乏笑料,这一次轮到了网络大V师伟,他曾经表达过这样的观点。

 

上海的第六波精彩来了

 

结果昨天凌晨,这样的事真的落到他头上了,他瞬间不淡定了。

 

上海的第六波精彩来了

 

到处求人。

 

上海的第六波精彩来了

 

还忍不住说了这样的话。

 

上海的第六波精彩来了

 

于是网友们看到了,很多事情不落在自己的头上,可以很轻松地说话,可要是真落到自己的头上了,亲身经历过体验过,才知道那种滋味,所谓的看人挑担不吃力,自己挑担真费力,大概就是这样的了。

 

不爱讲段子的网友则发现了这样一个事情,在上海十六个区的三十二个书记区长中,上海本地人只占了三个,占比堪堪十分之一。

 

上海的第六波精彩来了

上海的第六波精彩来了

上海的第六波精彩来了

 

另有网友发现了这样一个经典博弈,这真的是太善于观察和思考了。

 

上海的第六波精彩来了

 

还有网友真的忧心如焚,他在上海虹桥看到这样的事。

 

上海的第六波精彩来了

 

当然,除了段子以外,上海普通市民们继续用自己的方式在发光发热,为社会尽到自己的一份力量,有网友自己出钱买了大白服给到小区的志愿者们。

 

上海的第六波精彩来了

 

上海的部分公司也很有良心,给员工发了这样的大礼包,真的很见心意了。

 

上海的第六波精彩来了

 

这份大礼包打开后,就是这样的,真的很能安慰和治愈人了。

 

上海的第六波精彩来了

 

更可贵的是,上海网友不仅有善心,而且还很严谨,这几天他们已经纠正了几个说法,12岁小孩行走50公里经他们测算后,被纠正成为了20公里。

 

还有方舱四个半小时不能上卫生间那事,

 

上海的第六波精彩来了

 

经过上海网友还原后,大概是这样的。

 

上海的第六波精彩来了

 

小区一栋楼出现阳性被拉走,则经上海网友还原后,是这样的,不是这栋楼里的所有人都会拉走。

 

上海的第六波精彩来了

 

还有一个事情也让上海网友澄清了,就是那个海峡对岸的表妹是在杭州拍的照片,然后是因为家里老人病了,所以才回去的,而不是因为其他原因回去的。

 

上海的第六波精彩来了

 

这大概就是上海人们的另一个好处,遇事不慌不急,不盲从,也不走极端,他们只相信事实,而且愿意现有规则内维护自己应有的东西,相当的有章法了。

 

对此,我只能认为,生活上海这座城市的大多数普通市民还是很好的,他们依然在相信着一些东西,依然在坚守着一些东西,并且在实际行动中体现出来。

 

这样的上海普通市民,值得拥有更多的善待和关心。

 

PS:今天在文章的最后,推荐一个很好朋友的号,他人很靠谱,我和他彼此之间也很信任,大家可以关注一下他。

 

 

这个是小晖的~

 

上海的第六波精彩来了

转自:https://mp.weixin.qq.com/s/Mzb9iIio_9VVvJ-Vyrflbw