1. 程式人生 > >16 靜態 組合 繼承

16 靜態 組合 繼承

menu 感受 方案 cls style append 數據屬性 urn 深度

class Room:
    tag = 12
    def __init__(self,name,owner,width,length,heigh):
        self.name = name
        self.owner = owner
        self.width = width
        self.length = length
        self.heigh = heigh
    @property
    def cal_area(self):
        print(%s住的%s總面積是%s%            (self.owner,self.name,self.width * self.length))
        
return self.width * self.length @classmethod def tell_info(cls,x): print(cls) print(------->,cls.tag) print(x) @staticmethod def wash_body(a,b,c): print(%s正在洗澡%a) #靜態方法: # r1 = Room(‘廁所‘,‘alex‘,100,100,100000) # r2 = Room(‘公共廁所‘,‘AA‘,1,1,1) #
print(r1.cal_area) #加 property之後可執行函數 靜態屬性 # print(r2.cal_area) # r1.cal_area() #類方法 # Room.tell_info(10) #實例也可以用 #靜態方法 名義上屬於類管理 實際上不可調用類屬性和實例屬性 Room.wash_body(AA,BB,CC) r2 = Room(公共廁所,AA,1,1,1) r2.wash_body(a,BBB,CCC) # print(Room.__dict__)

#總結
# 靜態屬性:函數作為數據屬性形式 調用時感受不到內在邏輯

# 既可以訪問實例屬性 也可以訪問雷屬性
# 類方法:可以訪問數據屬性 也可以訪問函數屬性
# 但是不可以訪問實例屬性
# 靜態方法:不能訪問類屬性 也不能訪問實例屬性

子類:

class School:
    def __init__(self,name,addr):

class Course:
    def __init__(self,name,price,period,school):

c1 = Course(linux,10dollor,1 h,s1)
print(c1.__dict__)
print(c1.school) #打印內存地址

while True:
    menu ={
                1:s1,
                2:s2,
                3:s3
                }
    choice = input(>>: )
    school_obj = menu[choice]
    name = input(namae:)
    price = input(‘‘)
    new_course = input()
    print(課程[%s]屬於[%s]學校%(Course,School))

 

#low 比解決方案
class Course:
    def __init__(self,name,price,period,school):
class School:
    def __init__(self, name, addr):
#...
self.name = name
self.Course_list = []
s1.Course_list.append(c1)
s1.Course_list.append(c2)
for Course_obj in s1.Course_list:
    print(Course_obj.name)

面向對象的三大特征:繼承 多態 封裝
類的繼承:
class Pclass1:

class Pclass2:

class SubClass(Pclass1):

子類繼承父類所有屬性 但若重名 並不改變父類屬性
當類顯著不同 且較小類是較大類所需組件 用組合比較好
當有很多相同特征 提取相同功能做基類 用繼承

含義2 某子類兼容於某基類 定義一個接口類 子類繼承接口類
並且繼承接口中定義的方法

MRO列表的構造遵循三條準則:
1 子類會優先於父類被檢查
2 多個父類會根據他們在列表總的順序被檢查
3 如果對下一個類存在兩個合法的選擇 選擇第一個父類

新式類:廣度優先 python3
經典類:深度優先 python2

16 靜態 組合 繼承