Py学习Day6:小练习

练习一:如下代码测试对象的浅拷贝、深拷贝,请绘制出内存示意图。

#测试对象的引用赋值、浅拷贝、深拷贝
import copy
class MobilePhone:
    def __init__(self,cpu,screen):
        self.cpu = cpu
        self.screen = screen
class CPU:
    def calculate(self):
        print("计算,算个 12345")
        print("CPU 对象:",self)
class Screen:
    def show(self):
        print("显示一个好看的画面,亮瞎你的钛合金大眼")
        print("屏幕对象:",self)
c = CPU()
s = Screen()
m = MobilePhone(c,s)
m.cpu.calculate()
n = m
print(m,n)
m2 = copy.copy(m)
print(m,m2)
m.cpu.calculate()
m2.cpu.calculate()
m3 = copy.deepcopy(m)
m3.cpu.calculate()

结果:

Py学习Day6:小练习_第1张图片

练习二: 定义发动机类 Motor、底盘类 Chassis、座椅类 Seat,车辆外壳类 Shell,并使用组合
关系定义汽车类。其他要求如下:定义汽车的 run()方法,里面需要调用 Motor 类的 work()方法,也需要调用座椅类 Seat 的 work()方法,也需要调用底盘类 Chassis 的 work()方法。

class CarRun:
    def runwork(self,ass):
        if ass =="发动机":
            return Motor()
        if ass =="底盘":
            return Chassis()
        if ass =="座椅":
            return Seat()
        else:
            return print("未知")

class Motor:
    def work(self):
        print("Motor")
class Chassis:
    def work(self):
        print("底盘")
class Seat:
    def work(self):
        print("座椅")

run=CarRun().runwork("底盘")
run.work()
run=CarRun().runwork("发动机").work()
run=CarRun().runwork("座椅").work()
run=CarRun()
run.runwork("方向盘")

结果:底盘
           Motor
           座椅
           未知

练习三:使用工厂模式、单例模式实现如下需求:
(1) 电脑工厂类 ComputerFactory 用于生产电脑 Computer。工厂类使用单例模式,
也就是说只能有一个工厂对象。
(2) 工厂类中可以生产各种品牌的电脑:联想、华硕、神舟
(3) 各种品牌的电脑使用继承实现:
(4) 父类是 Computer 类,定义了 calculate 方法
(5) 各品牌电脑类需要重写父类的 calculate 方法

class ComputerFactory:

    def create_computer(self, brand):
        if brand == "联想":
            return lenova()
        if brand == "华硕":
            return ASUS()
        elif brand == "神舟":
            return HASEE()
        else:
            return print("未知品牌,请重新输入")

    __obj=None   #类属性
    __init__flag=True
    def __new__(cls, *args, **kwargs):
        if cls.__obj==None:
            cls.__obj=object.__new__(cls)
        return cls.__obj
    def __init__(self):
        if ComputerFactory.__init__flag==True:
            print("init....")
            ComputerFactory.__init__flag=False
class computer:
    def calculate(self):
        print("computer calculate")
class lenova(computer):
    def calculate(self):
        print("lenova calculate")
class ASUS:
    def calculate(self):
        print("ASUS calculate")
class HASEE:
    def calculate(self):
        print("HASEE calculate")

factory=ComputerFactory()
factory.create_computer("联想").calculate()
factory.create_computer("华为")

结果:init....
          lenova calculate
          未知品牌,请重新输入

练习四:定义一个 Employee 雇员类,要求如下:
(1) 属性有:id、name、salary
(2) 运算符重载+:实现两个对象相加时,默认返回他们的薪水和
(3) 构造方法要求:输入 name、salary,不输入 id。id 采用自增的方式,从 1000 开
始自增,第一个新增对象是 1001,第二个新增对象是 1002。
(4) 根据 salary 属性,使用@property 设置属性的 get 和 set 方法。set 方法要求输
入:1000-50000 范围的数字。

#coding=utf-8
class Employee:
    a=1000
    def __init__(self,name,salary):
        self.__name=name
        Employee.a+=1
        self.id=Employee.a
        self.__salary=salary

    @property
    def salary(self):
        return self.__salary
    @salary.setter
    def salary(self,salary):
        if 1000 < salary < 500000:
            self.__salary=salary
            print(self.__salary)
        else:
            print("录入错误!")
    def output_info(self):
        print("姓名:{0},薪资:{1},id:{2}".format(self.__name,self.__salary,self.id))
    def __add__(self, other):
        if isinstance(other,Employee):
            return self.__salary+other.__salary

emp1=Employee("丽丽",1500)
emp2=Employee("莉莉",20000)
emp1.output_info()
emp2.output_info()
print(emp1.salary)
emp1.salary=10
emp2.salary=30000
emp1.output_info()
emp2.output_info()
print(emp1+emp2)

结果:

Py学习Day6:小练习_第2张图片

 

你可能感兴趣的:(学习)