python类相关的练习题

1、写一个矩形的类,那么这个类默认有长和宽两个参数,当传入一个叫square的属性时,值就等于边长,由于是正方形那么长和宽就等于边长。

class Rectangle(object):
  
    # init object
    def __init__(self,width,height):
        self.width = width
        self.height = height
  
  
    def getacreage(self):
        return self.width * self.height
  
    def __setattr__(self,name,value):
        if name == 'square':
            self.width = value
            self.height = value
  
        else:
            super().__setattr__(name,value)

2、完成如下要求:

  • 定制一个计时器类

  • start和stop方法代表启动和停止计时

  • 假设计时器对象t1,定制t1对象直接执行和打印时的输出信息

  • 当计时器未启动或已经停止计时,调用stop方法会给予温馨提示

  • 两个计时器对象可以进行相加: t1 + t2

import time
  
class Mytimer():
  
    # 初始化
    def __init__(self):
        self.prompt = 'Timer is not start'    # 提示信息
        self.start_time = None 
        self.stop_time = None
      
    # 启动定时器
    def start(self):
        if self.start_time:
            print('Please Use Stop() to stop Timer')   # 属性存在,表示已经启动计时
        else:
            self.start_time = time.time()
            print('The start of Timer')
  
    # 关闭定时器
    def stop(self):
        if self.start_time:
            self.stop_time = time.time()
            print('The stop of Timer')
            self._calc()
        else:
         print('Please Use Start() to start Timer')   # 没有执行start(),检测不到属性,进行提示
  
    # 计算耗时
    def _calc(self):
        self.prompt = 'Total time : '
        self.end_time = self.stop_time - self.start_time
        self.prompt += str('{:.2f}'.format(self.end_time))
        self.start_time = None
        self.stop_time = None
  
    # 直接执行对象时,打印提示信息
    def __repr__(self):
        return self.prompt
  
    # 打印对象和执行对象相同
    __str__ = __repr__
  
    # 计时器相加
    def __add__(self,other):
        self.prompt = 'All Time : '
        add_time = self.end_time + other.end_time
        self.prompt += str('{:.2f}'.format(add_time))
        return self.prompt

3、完成如下需求

  • 定义一个温度类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性。
  • 两个属性会自定进行转换,也就是说可以给摄氏度这个属性赋值,然后打印的华氏度属性是自动转换后的结果。
class Celsius:
  
    def __init__(self,value = 37):
        self.value = value
  
    def __set__(self,instance,value):
        self.value = value
  
    def __get__(self,instance,owner):
        return self.value
  
  
class Fahrenheit:
  
    def __set__(self,instance,value):
         instance.cel = (float(value) - 32 )  / 1.8
           
    def __get__(self,instance,owner):
        return instance.cel * 1.8  + 32   # 通过instance实例访问,实例化后对象的cel属性
  
class Temperature:
    cel = Celsius()
    fah = Fahrenheit()
  
#Python小白学习交流群:725638078      
>>> a = Temperature()
>>> a.cel
37
>>> a.fah
98.60000000000001
>>> a.fah = 100
>>> a.cel
37.77777777777778
>>>

由于instance表示的是实例化的对象本身(a),所以这里使用instance,指代a,来访问设置的cel属性,来进行换算。

猜你喜欢

转载自blog.csdn.net/qdPython/article/details/129954468