上一篇:文件的打开与关闭 | 手把手教你入门Python之六十八
下一篇:文件的读写 | 手把手教你入门Python之七十
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
案例讲解
1、设计两个类:
一个点类,属性包括x,y坐标。
一个Rectangle类(矩形),属性有左上角和右下角的坐标
方法:1.计算矩形的面积;2.判断点是否在矩形内
实例化一个点对象,一个正方形对象,输出矩形的面积、输出点是在矩形内
class Point(object):
# Point 方法在创建时,需要两个int类型的参数,用来表示x,y坐标
def __init__(self, x: int, y: int):
self.x = x
self.y = y
class Rectangle(object):
def __init__(self, top_left: Point, bottom_right: Point):
self.top_left = top_left
self.bottom_right = bottom_right
def get_area(self):
# 面积:长 * 宽
length = abs(self.bottom_right.x - self.top_left.x)
width = abs(self.top_left.y - self.bottom_right.y)
return length * width
def is_inside(self, point):
# if self.bottom_right.x >= point.x >= self.top_left.x and self.top_left.y >= point.y >= self.bottom_right.y:
# return True
# else:
# return False
return self.bottom_right.x >= point.x >= self.top_left.x and self.top_left.y >= point.y >= self.bottom_right.y
p1 = Point(4, 20) # 定义左上角的点
p2 = Point(30, 8) # 定义右下角的点
r = Rectangle(p1, p2) # 把左上角和右下角的点传递给矩形
print(r.get_area()) # 312
# p = Point(10;, 13) # True
p = Point(20;, 30) # False
print(r.is_inside(p))
2、写一个计算器类,可以进行加、减、乘、除计算
class Calculator(object):
@staticmethod
def add(a, b):
return a + b
@staticmethod
def sub(a, b):
return a - b
@staticmethod
def mul(a, b):
return a * b
@staticmethod
def div(a, b):
return a / b
print(Calculator.add(4, 5)) # 9
print(Calculator.sub(4, 5)) # -1
print(Calculator.mul(4, 5)) # 20
print(Calculator.div(4, 5)) # 0.8
3、创建一个Person类,添加一个类字段用来统计Person类的对象的个数
class Person(object):
__count = 0 # 类属性
def __new__(cls, *args, **kwargs):
x = object.__new__(cls) # 申请内存,创建一个对象,并设置类型是 Person 类
return x
def __init__(self, name, age):
Person.__count += 1
self.name = name
self.age = age
@classmethod
def get_count(cls):
return cls.__count
# 每次创建对象,都会调用 __new__ 和 __init__ 方法
# 调用 __new__ 方法,用来申请内存
# 如果不重写 __new__ 方法,它会自动找object 的 __new__
# object 的 __new__ 方法,默认实现是申请了一段内存,创建一个对象
p1 = Person('张三', 18)
p2 = Person('李四', 19)
p3 = Person('jack', 20)
# print(Person.count) # 3
print(p1, p2, p3)
print(Person.get_count()) # 3
# p4 = object.__new__(Person) # 申请了内存,创建了一个对象,并设置它的类型是Person
# p4.__init__('tony', 23)
# print(p4)
4、建立一个汽车类Auto,包括轮胎个数,汽车颜色,车身重量,速度等属性,并通过不同的构造方法创建实例。至少要求汽车能够加速、减速、停车。再定义一个小汽车类CarAuto继承Auto并添加空调、导航属性,并且重新实现方法覆盖加速、减速的方法
class Auto(object):
def __init__(self, color, weight, speed=0, wheel_count=4):
self.wheel_count = wheel_count
self.color = color
self.weight = weight
self.speed = speed
def change_speed(self, x):
"""
修改车速
:param x: 表示要修改的车速值。如果是正数,表示加速,负数表示减速,0表示停车
"""
if x == 0:
self.speed = 0 # 如果传递的参数0,表示要停车
return
self.speed += x
if self.speed <= 0 and x < 0
return # return 后面可以什么数据都不加,表示函数结束
class CarAuto(Auto):
def __init__(self, color, weight, ac, navigator, speed=0, wheel_count=4):
super(CarAuto, self).__init__(color, weight, speed, wheel_count)
self.navigator = navigator
self.ac = ac
car = CarAuto('白色', 1.6, '美的', 'Android', 10, 5)
car.change_speed(30)
print(car.speed) # 30
car.change_speed(-40)
print(car.speed) # 0
5.有一个银行账户类Account,包括名字,余额等属性,方法有存钱、取钱、查询余额的操作。要求:
1.在存钱时,注意存款数据的格式
2.取钱时,要判断余额是否充足,余额不够的时候要提示余额不足
class Account(object):
def __init__(self, name, balance):
self.name = name
self.balance = balance
def save_money(self, money):
assert isinstance(money, float) or isinstance(money, int), '请注意存钱数据的格式'
self.balance += money
def take_money(self, money):
if self.balance < money:
print('余额不足')
else:
self.balance -= money
def check_balance(self):
return self.balance
a = Account('张三', 8000)
a.save_money(10000)
a.take_money(1000)
print('当前余额:', a.check_balance())
a.take_money(20000)
print('当前余额:', a.check_balance())