自学时遇到的,弄不出来。

Color类封装使用RGB颜色模型表示颜色及相应功能:
定义带3个整数参数r,g,b的构造函数,用于初始化对应于红、绿、蓝三种颜色分量的私有实例对象属性__r, __g, __b。
通过装饰器@property定义3个可以作为只读属性访问的实例对象方法r()、g()、c()
定义不带参、有返回值的亮度计算实例方法luminance: g=0.299r+0.587g+0.114b,返回g
定义不带参、有返回值的彩色转灰度的实例方法toGray: 调用luminance方法获得亮度g,对g取整得y,返回元组(y,y,y)
实例化Color类,使用只读属性输出三个通道值,调用方法toGray、luminance。

img

定义抽象类shape,包含抽象方法area面积的计算。再定义扩展2个子类Circle、Rectangle,构造函数传入基本参数,重写area方法(不带参有返回值,返回面积)。
定义类柱体Barrel,构造函数两个参(高和Shape对象),方法volume(不带参无返回值)计算柱体体积并输出柱体各项信息,

img

class Color:
    def __init__(self,r,g,b):
        self.__r=r
        self.__g=g
        self.__b=b
    @property
    def r(self):
        return self.__r
    @property
    def g(self):
        return self.__g
    @property
    def b(self):
        return self.__b
    def lum(self):
        g=0.299*self.__r+0.587*self.__g+0.114*self.__b
        return g
    def toGray(self):
        g=self.lum()
        return (int(g),int(g),int(g))
r=255
g=152
b=0
c=Color(r,g,b)
print(f'r={c.r},g={c.g},b={c.b}')
print(c.lum())
print(c.toGray())