# -*- coding: utf-8 -*-
from abc import abc ,abstractmethod
from collections import namedtuple
# 為什麼要用抽象類呢 抽象類解決有些基類不能實現方法,如水果不可以有吃的方法,但是子類如蘋果可以有吃的方法,
# 抽象類的方法什麼都不用做,但是子類必須實現抽象類裡面的所有方法才可以合法例項化
#理解有限,大家多多指教
customer = namedtuple(
'customer'
,'name,fidelity'
)#customer 可以看成是類名,後面的是類的兩個屬性.
class
lineitem
:'''獲取總購物價值'''
def__init__
(self,product,quantity,price)
: self.product =product
self.quantity =quantity
self.price = price
deftotal
(self)
:return self.price *self.quantity
class
order
:def
__init__
(self,customer,cart ,promotion=
none):
self.customer =customer
self .cart =
list
(cart)
self .promotion =promotion
deftotal
(self):if
nothasattr
(self,
'__total'):
#判斷類的屬性中是否包含__total
self.__total =
sum(item.total(
)for item in self.cart)
return self.__total
defdue(self)
:if self.promotion is
none
: discount =
0else
: discount =self.promotion.discount(self)
return self.total(
)-discount
def__repr__
(self)
: fmt =
''return fmt.
format
(self.total(
),self.due())
class
promotion
(abc)
: @abstractmethod
defdiscount
(self,order)
:'''返回折扣的正值'''
class
fidelitypromo
(promotion)
:def
discount
(self,order)
:return order.total()*
0.05
if order.customer.fidelity>=
1000
else
0class
bulkitempromo
(promotion)
:def
discount
(self,order)
: discount=
0for item in order.cart:
if item.quantity>=20:
discount+=item.total()*
0.1return discount
class
largeorderpromo
(promotion)
:def
discount
(self,order)
: distinct_items =
iflen
(distinct_items)
>=10:
return order.total()*
0.07
return
0joe=customer(
'john deo',0
)ann=customer(
'ann'
,1100
)cart =
[lineitem(
'banana',4
,.5),
lineitem(,10
,1.5),
lineitem(
'water',5
,5.0)]
print
(cart)
print
(order(joe,cart,fidelitypromo())
)print
(order(ann,cart,fidelitypromo())
)[<__main__.lineitem object at 0x7f5471d90048
>
,<__main__.lineitem object at 0x7f5471d90080
>
,<__main__.lineitem object at 0x7f5471d900b8
>
]42.00 due :
42.00
>
42.00 due :
39.90
>
php抽象類的簡單應用
抽象類也是物件導向中的重要概念,和介面 繼承的概念重要性相當,在物件導向的開發中,所有的物件都是通過類來描述的,但是反過來,並不是所有類都是用來描繪物件的,廣義上講如果乙個類中沒有足夠資訊來描述乙個具體的物件,這樣的類就是抽象類。具體用簡單的 來實現 1 abstract class acaneat...
抽象類的應用
新建乙個抽象類 abstract class person 自動生成get和set方法 public int getage public void setage int age public string getname public void setname string name 建立抽象函式 ...
java 抽象類應用
本例子通過乙個例項來具體闡述抽象類的應用,首先乙個抽象類person2,裡面定義了一些人的共有屬性 年齡,姓名 和抽象方法want want 方法來具體實現不同的人的需求 學生想要成績,工人想要工資 接下來student類和worker類繼承person類,並且實現自己想要的want 但是人的共有屬...