Shape Triangle Rectangle Circle类的实现

  

复制代码
import math


class Shape:
    @property
    def area(self):
        raise NotImplementedError('Base class not implemented')


class Triangle(Shape):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    @property
    def area(self):
        p = self.a + self.b + self.c
        return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))


class Rectangle(Shape):
    def __init__(self, height, width):
        self.h = height
        self.w = width

    @property
    def area(self):
        return self.h * self.w


class Circle(Shape):
    def __init__(self, radius):
        self.d = radius * 2

    @property
    def area(self):
        return math.pi * self.d * self.d * 0.25


shapes = [Triangle(3, 4, 5), Rectangle(3, 4), Circle(4)]
for b in shapes:
    print('the area of {} = {}'.format(b.__class__.__name__, b.area))

# implement serialization
# 1 Mixin
import json, pickle, msgpack


class SerializableMixin:
    def dumps(self, type='json'):
        if type == 'json':
            return json.dumps(self.__dict__)
        elif type == 'pickle':
            return pickle.dumps(self.__dict__)
        elif type == 'msgpack':
            return msgpack.dumps(self.__dict__)
        else:
            raise NotImplementedError('type serialization is not implemented')


class SerializableCircleMixin(SerializableMixin, Circle): pass


scm = SerializableCircleMixin(5)
print(scm.area)
print(scm.dumps('json'))


# 2 decorator
def dumps(cls):
    def _dumps(self, type='json'):
        if type == 'json':
            return json.dumps(self.__dict__)
        elif type == 'pickle':
            return pickle.dumps(self.__dict__)
        elif type == 'msgpack':
            return msgpack.dumps(self.__dict__)
        else:
            raise NotImplementedError('type serialization is not implemented')

    cls.dumps = _dumps
    return cls


@dumps
class SerializableRectangle(Rectangle): pass


sr = SerializableRectangle(height=4, width=5)
print(sr.area)
print(sr.dumps('json'))
复制代码

 

posted @   ascertain  阅读(272)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示