社会上要想分出层次,只有一个办法,那就是竞争,你必须努力,否则结局就是被压在社会的底层!
总结:
- 面向对象复杂问题非常难分解,所以我们必须从小的问题一步一步来;
- 每一道练习题出的都是有目的的,慎重对待;
- 解决问题: 重在设计(解决问题的思路),然后实现解决方案;
4、实现温度的处理 (设计思路理解问题)
实现华氏温度和摄氏温度的转换;
℃ = 5 × (℉ - 32) / 9
℉ = 9 × ℃ / 5 + 32
完成以上转换后,增加与开氏温度的转换,K = ℃ + 273.15
# 思路设计: 1 .类和实例兼顾 访问
class Temperature:
def __init__(self,t,unit='c'):
self._c = None
self._f = None
self._k = None
if unit.lower() == 'k':
self._k = t
self._c = self.k2c(t)
elif unit.lower() == 'f':
self._f = t
self._c = self.f2c(t)
else:
self._c = t
@property
def c(self): # 摄氏温度
return self._c
@property
def f(self): # 华氏温度
if self._f is None:
self._f = self.c2f(self._c)
return self._f
@property
def k(self): # 开式温度
if self._k is None:
self._k = self.c2k(self._c)
return self._k
# 温度转换
@classmethod
def c2f(self,c): # 设计模式 1 ; 工具函数: 既可以 实例 又可以 工具;
return 9 * c / 5 +32
@classmethod
def f2c(self,f):
return (f - 32) * 5 / 9
@classmethod
def c2k(self,c):
return c + 273.15
@classmethod
def k2c(self,k):
return k - 273.15
@classmethod
def f2k(self,f):
return self.c2k(self.f2c(f))
@classmethod
def k2f(self,k):
return self.c2f(self.k2c(k))
t = Temperature(30)
print(t.c,t.k,t.f)
print('-'*60)
t1 = Temperature(0,'f')
print(t1.c,t1.k,t1.f)
#-------------------------------------------------------------------------------
30 303.15 86.0
---------------------------------------------------------
-17.77777777777778 255.3722222222222 0
思路设计: 2
5. 模拟购物车购物 (类该怎么设计;数据库设计——CMDB设计问题)
思路:商品类:往容器中加 东西;
# 思路:商品类:往容器中加 东西;
class Color: # 颜色的描述绝对不是一件简单的事情;
RED = 0
GREEN = 1
BLACK = 2
OTHER = 1000
class Item:
def __init__(self,price,type,mark,**kwargs): # 确定的参数;不确定的参数用可变参数收集;
#self.id = id # 商品的ID非常重要;
self.price = price
self.type = type
self.mark = mark
self.__spec = kwargs
# self.__spec.update(price=price,type=type,mark=mark) 使用小技巧;
self.__dict__.update(kwargs) # 小技巧:把不确定的参数更新到类属性中去;
def __repr__(self): # 显示出来给人看的;
return '<Item {} {}>'.format(self.mark,self.color) # 要求必须是字符串 出来;
class Cart:
def __init__(self):
self._items = []
def add_item(self,item:Item):
self._items.append(item)
def getallitems(self):
return self._items
item = Item(20,'001','Audi',color=Color.BLACK,weight=2)
print(item) # repr前后可以显示
print(item.__dict__) # 查看属性 ;
print(item.color) # 更新的属性可以用;
cart = Cart()
cart.add_item(item)
item = Item(2,'p002','Hero',color = Color.RED)
print(item.__dict__)
cart.add_item(item)
print(cart.getallitems())
# ------------------------------------------------------------------------------
<Item Audi 2>
{'price': 20, 'type': '001', 'mark': 'Audi', '_Item__spec': {'color': 2, 'weight': 2}, 'color': 2, 'weight': 2}
2
{'price': 2, 'type': 'p002', 'mark': 'Hero', '_Item__spec': {'color': 0}, 'color': 0}
[<Item Audi 2>, <Item Hero 0>]
网友评论