1. 程式人生 > >面向物件 成員

面向物件 成員

-------------最慘的破產就是喪失自己的熱情。
# ---------------------------------------------------------------------------------#
day 016
'''
本節主要內容:
1. 類的成員
2. 類的成員-變數
3. 類的成員-方法
4. 類的成員-屬性

'''


# 例項方法針對的是例項,
# 類方法針對的是類,
# 他們都可以繼承和重新定義,而靜態方法則不能繼承,可以認為是全域性函式。

#
# class People:
# dream = 'learn_python'
# def __init__(self,name,age,borg):
# self.name =name
# self.age = age
# self.borg = borg
#
# kk = People("卡卡",18,"boy")
# kk.dream = "learn_java"
# print(kk.name)
# print(kk.borg)
# print(kk.dream)
#
# JJ = People("靜靜",25,"girl")
# print(JJ.name)
# print(JJ.borg)
# print(JJ.dream)


# class Huiji:
#
# def swimming(self):
# print("My 灰機 會 swimming")
#
# def playball(self):
# print("My 灰機 會 playball")
#
# QQ = Huiji()
#
# QQ.swimming()
# QQ.playball()


# class Pig:
# def fly(self):
# print("MY de pig can 飛")
#
# @classmethod
# def flyandjianshen(cls):
# print("MY de ping can jianshen")
#
#
#
# print(Pig)
# Pig.fly()
#
# iG =Pig
# iG.fly()
# iG.flyandjianshen()


# class shengxiao:
# def __init__(self, price, weight,danjia):
# self.price = price
# self.weight = weight
# self.danjia = danjia
#
# @property
# def getzongjia(self):
# return self.danjia * self.weight
#
# chouniu = shengxiao("cn",'3500','300','55')
# print(chouniu.getzongjia)


# ---------------------------------------------------------------------------------
# 1. 簡述面向物件三大特性並用示例解釋說明?【背寫】
# 封裝 : 對屬性和方法的封裝,以便隨時呼叫
# eg:
# 繼承 : 子類除了本身以外還可以使用父類的方法和
# eg:
# 多型 : 鴨子模型,同一個物件擁有多種形態
# eg:
# ---------------------------------------------------------------------------------#
# 2. 面向中的變數分為哪幾種?並用示例說明區別?【背寫】
# 1. 例項變數 .說白了,就是每個例項變數都應該擁有的變數.比如,人的名字,人的愛好
# ,每個人的個人資訊都屬於例項變數..給物件用的 .

# 2. 類變數(靜態變數) 直接寫在類中的變數就是類變數,需要用類名來訪問,可以改變.
# ,多個物件共享的.

# ---------------------------------------------------------------------------------#
# 3. 面向物件中方法有哪幾種?並用示例說明區別?【背寫】
# 1. 類方法 類名.方法 呼叫
# 2. 例項方法 物件.方法 呼叫
# 3. 靜態方法 類名.方法 呼叫
# ---------------------------------------------------------------------------------#
# 4. 面向物件中的屬性有什麼?並用示例說明?
# 1. 第一種 是 把 方法 轉換成屬性
# 2. 物件.屬性
# ---------------------------------------------------------------------------------#
# 5. 簡述靜態方法和類方法的區別?
# 靜態方法 : 不用傳遞引數,沒有繼承
# 類方法 : 需要傳遞引數,可以繼承; 訪問類方法,預設傳遞的是類

# ---------------------------------------------------------------------------------#
# 6. 面向物件的方法中那個無需傳引數?
# 靜態方法

# ---------------------------------------------------------------------------------#
# 7. 面向物件中公有和私有成員,在編寫和呼叫有哪些不同?
# 一個使用 __xx__ 兩端使用__
# 私有使用 __xx 左端使用
# ---------------------------------------------------------------------------------#
# 8. 看程式碼寫結果:【禁止執行】
# class Foo:
# a1 = 11
# a2 = 12
#
# def __init__(self):
# self.a1 = 1
#
#
# obj = Foo()
# print(obj.a1)
# print(obj.a2)


# --> 1 / 12


# ---------------------------------------------------------------------------------#
# 9. 看程式碼寫每個列印結果:【禁止執行,如果報錯可認為程式會繼續向後執⾏】
# class Foo(object):
# a1 = 11
#
# def __init__(self, num):
# self.a2 = num
#
# obj = Foo(999)
# print(obj.a2) # 999
# print(obj.a1) # 11
#
# print(Foo.a1) # 11
# print(Foo.a2) # Error

# ---------------------------------------------------------------------------------#
# 10. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】
# class Foo(object):
# a1 = 1
# __a2 =2
# def __init__(self,num):
# self.num = num
# self.__salary =1000
#
# def get_data(self):
# print(self.num+self.a1)
#
# obj = Foo(666)
#
# print(obj.num) #666
# print(obj.a1) #1
# print(obj.__salary) # 私有不可訪問
# print(obj.__a2) # 私有不可訪問
# print(Foo.a1) # 1
# print(Foo.__a2) # 私有不可訪問

# ---------------------------------------------------------------------------------#
# 11. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】行】
# class Foo(object):
# a1 = 1
# __a2 = 2
#
# def __init__(self, num):
# self.num = num
# self.__salary = 1000
#
# def get_data(self):
# print(self.num + self.a1)
#
# obj1 = Foo(666)
# obj2 = Foo(999)
# print(obj1.num) # 666
# print(obj2.a1) # 1
#
# obj1.num = 18
# obj1.a1 = 99
#
# print(obj1.num) #18
# print(obj1.a1) #99
#
# print(obj2.a1) # 1
# print(obj2.num+Foo.a1) # 1000
# print(obj2.num+obj1.a1) # 999+99-->1098

# ---------------------------------------------------------------------------------#
# 12. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】行】
# class Foo(object):
# hobby = "大保健"
#
# def __init__(self,num):
# self.num = num
# self.__salary =1000
#
# def f1(self):
# print(Foo.hobby)
#
# @staticmethod
# def f2():
# print(Foo.hobby)
#
# @classmethod
# def f3(cls):
# print(cls.hobby)

# 請將以上方法補全並呼叫執行.
#需求: f1,例項方法 f2,靜態方法 f3,類方法
# ---------------------------------------------------------------------------------#
#13.看程式碼寫結果:[禁止運行,如果報錯可認為程式會繼續向後執行]
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# Foo.f3()
#--> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 14. 看程式碼寫結果:【禁⽌yun行,如果報錯可認為程式會繼續向後執行】
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# obj = Foo
# obj.f3()
#--> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 15. 看程式碼寫結果:【禁⽌運行,如果報錯可認為程式會繼續向後執行】
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# def f2(self):
# self.f3()
# Foo.f3()
#
# obj = Foo()
# obj.f2()
#--> <class '__main__.Foo'> --> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 16 看程式碼寫結果:【禁⽌運行,如果報錯可認為程式會繼續向後執行】
# class Base(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# def f1(self):
# print('base.f1')
# self.f3()
#
# class Foo(Base):
#
# def f2(self):
# print('foo.f2')
# self.f1()
#
# obj = Foo()
# obj.f2()

#--> foo.f2 -->base.f1 --> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 17. 請編在寫一個私有的靜態⽅方法,並通過程式碼證明私有方法不能再外部方法但可以在內部訪問。

# class Animal:
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# def gun(self,c,d):
# print(c,d)
#
# def __eat(self,a,b):
# print(a,b)
#
# panda =Animal("胖達",'18')
# panda.name()
# panda.age()
# panda.gun(8,9)
# panda.__eat(7,6) #--> 不可訪問

# ---------------------------------------------------------------------------------#
# 18. 現有500W條資料.請使用面向物件的思維來完成這500W條資料的分頁工作(升級題)
class Page:
def __init__(self,lst,pagesize):
self.lst =lst
self.pagesize = pagesize

def start(self,a):
return a

def end(self,b): #[返回最後一頁]
return b
def index(self,x): #[返回指定頁面]
return x

ye = input("輸入要查詢的資料的頁碼-->")

# ---------------------------------------------------------------------------------#
# 19. 在昨天最後一題的基礎上.把資料寫入到檔案中.並且註冊的時候需要到檔案中判斷是否重
# 復.如果重複提示不能註冊.(升級題)





'''
本節主要內容:
1. 類的成員
2. 類的成員-變數
3. 類的成員-方法
4. 類的成員-屬性

'''


# 例項方法針對的是例項,
# 類方法針對的是類,
# 他們都可以繼承和重新定義,而靜態方法則不能繼承,可以認為是全域性函式。

#
# class People:
# dream = 'learn_python'
# def __init__(self,name,age,borg):
# self.name =name
# self.age = age
# self.borg = borg
#
# kk = People("卡卡",18,"boy")
# kk.dream = "learn_java"
# print(kk.name)
# print(kk.borg)
# print(kk.dream)
#
# JJ = People("靜靜",25,"girl")
# print(JJ.name)
# print(JJ.borg)
# print(JJ.dream)


# class Huiji:
#
# def swimming(self):
# print("My 灰機 會 swimming")
#
# def playball(self):
# print("My 灰機 會 playball")
#
# QQ = Huiji()
#
# QQ.swimming()
# QQ.playball()


# class Pig:
# def fly(self):
# print("MY de pig can 飛")
#
# @classmethod
# def flyandjianshen(cls):
# print("MY de ping can jianshen")
#
#
#
# print(Pig)
# Pig.fly()
#
# iG =Pig
# iG.fly()
# iG.flyandjianshen()


# class shengxiao:
# def __init__(self, price, weight,danjia):
# self.price = price
# self.weight = weight
# self.danjia = danjia
#
# @property
# def getzongjia(self):
# return self.danjia * self.weight
#
# chouniu = shengxiao("cn",'3500','300','55')
# print(chouniu.getzongjia)


# ---------------------------------------------------------------------------------
# 1. 簡述面向物件三大特性並用示例解釋說明?【背寫】
# 封裝 : 對屬性和方法的封裝,以便隨時呼叫
# eg:
# 繼承 : 子類除了本身以外還可以使用父類的方法和
# eg:
# 多型 : 鴨子模型,同一個物件擁有多種形態
# eg:
# ---------------------------------------------------------------------------------#
# 2. 面向中的變數分為哪幾種?並用示例說明區別?【背寫】
# 1. 例項變數 .說白了,就是每個例項變數都應該擁有的變數.比如,人的名字,人的愛好
# ,每個人的個人資訊都屬於例項變數..給物件用的 .

# 2. 類變數(靜態變數) 直接寫在類中的變數就是類變數,需要用類名來訪問,可以改變.
# ,多個物件共享的.

# ---------------------------------------------------------------------------------#
# 3. 面向物件中方法有哪幾種?並用示例說明區別?【背寫】
# 1. 類方法 類名.方法 呼叫
# 2. 例項方法 物件.方法 呼叫
# 3. 靜態方法 類名.方法 呼叫
# ---------------------------------------------------------------------------------#
# 4. 面向物件中的屬性有什麼?並用示例說明?
# 1. 第一種 是 把 方法 轉換成屬性
# 2. 物件.屬性
# ---------------------------------------------------------------------------------#
# 5. 簡述靜態方法和類方法的區別?
# 靜態方法 : 不用傳遞引數,沒有繼承
# 類方法 : 需要傳遞引數,可以繼承; 訪問類方法,預設傳遞的是類

# ---------------------------------------------------------------------------------#
# 6. 面向物件的方法中那個無需傳引數?
# 靜態方法

# ---------------------------------------------------------------------------------#
# 7. 面向物件中公有和私有成員,在編寫和呼叫有哪些不同?
# 一個使用 __xx__ 兩端使用__
# 私有使用 __xx 左端使用
# ---------------------------------------------------------------------------------#
# 8. 看程式碼寫結果:【禁止執行】
# class Foo:
# a1 = 11
# a2 = 12
#
# def __init__(self):
# self.a1 = 1
#
#
# obj = Foo()
# print(obj.a1)
# print(obj.a2)


# --> 1 / 12


# ---------------------------------------------------------------------------------#
# 9. 看程式碼寫每個列印結果:【禁止執行,如果報錯可認為程式會繼續向後執⾏】
# class Foo(object):
# a1 = 11
#
# def __init__(self, num):
# self.a2 = num
#
# obj = Foo(999)
# print(obj.a2) # 999
# print(obj.a1) # 11
#
# print(Foo.a1) # 11
# print(Foo.a2) # Error

# ---------------------------------------------------------------------------------#
# 10. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】
# class Foo(object):
# a1 = 1
# __a2 =2
# def __init__(self,num):
# self.num = num
# self.__salary =1000
#
# def get_data(self):
# print(self.num+self.a1)
#
# obj = Foo(666)
#
# print(obj.num) #666
# print(obj.a1) #1
# print(obj.__salary) # 私有不可訪問
# print(obj.__a2) # 私有不可訪問
# print(Foo.a1) # 1
# print(Foo.__a2) # 私有不可訪問

# ---------------------------------------------------------------------------------#
# 11. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】行】
# class Foo(object):
# a1 = 1
# __a2 = 2
#
# def __init__(self, num):
# self.num = num
# self.__salary = 1000
#
# def get_data(self):
# print(self.num + self.a1)
#
# obj1 = Foo(666)
# obj2 = Foo(999)
# print(obj1.num) # 666
# print(obj2.a1) # 1
#
# obj1.num = 18
# obj1.a1 = 99
#
# print(obj1.num) #18
# print(obj1.a1) #99
#
# print(obj2.a1) # 1
# print(obj2.num+Foo.a1) # 1000
# print(obj2.num+obj1.a1) # 999+99-->1098

# ---------------------------------------------------------------------------------#
# 12. 看程式碼寫每⼀一個列印結果:【禁⽌止運⾏行行,如果報錯可認為程式會繼續向後執⾏行行】行】
# class Foo(object):
# hobby = "大保健"
#
# def __init__(self,num):
# self.num = num
# self.__salary =1000
#
# def f1(self):
# print(Foo.hobby)
#
# @staticmethod
# def f2():
# print(Foo.hobby)
#
# @classmethod
# def f3(cls):
# print(cls.hobby)

# 請將以上方法補全並呼叫執行.
#需求: f1,例項方法 f2,靜態方法 f3,類方法
# ---------------------------------------------------------------------------------#
#13.看程式碼寫結果:[禁止運行,如果報錯可認為程式會繼續向後執行]
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# Foo.f3()
#--> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 14. 看程式碼寫結果:【禁⽌yun行,如果報錯可認為程式會繼續向後執行】
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# obj = Foo
# obj.f3()
#--> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 15. 看程式碼寫結果:【禁⽌運行,如果報錯可認為程式會繼續向後執行】
# class Foo(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# def f2(self):
# self.f3()
# Foo.f3()
#
# obj = Foo()
# obj.f2()
#--> <class '__main__.Foo'> --> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 16 看程式碼寫結果:【禁⽌運行,如果報錯可認為程式會繼續向後執行】
# class Base(object):
#
# @classmethod
# def f3(cls):
# print(cls)
#
# def f1(self):
# print('base.f1')
# self.f3()
#
# class Foo(Base):
#
# def f2(self):
# print('foo.f2')
# self.f1()
#
# obj = Foo()
# obj.f2()

#--> foo.f2 -->base.f1 --> <class '__main__.Foo'>

# ---------------------------------------------------------------------------------#
# 17. 請編在寫一個私有的靜態⽅方法,並通過程式碼證明私有方法不能再外部方法但可以在內部訪問。

# class Animal:
# def __init__(self,name,age):
# self.name = name
# self.age = age
#
# def gun(self,c,d):
# print(c,d)
#
# def __eat(self,a,b):
# print(a,b)
#
# panda =Animal("胖達",'18')
# panda.name()
# panda.age()
# panda.gun(8,9)
# panda.__eat(7,6) #--> 不可訪問

# ---------------------------------------------------------------------------------#
# 18. 現有500W條資料.請使用面向物件的思維來完成這500W條資料的分頁工作(升級題)
class Page:
def __init__(self,lst,pagesize):
self.lst =lst
self.pagesize = pagesize

def start(self,a):
return a

def end(self,b): #[返回最後一頁]
return b
def index(self,x): #[返回指定頁面]
return x

ye = input("輸入要查詢的資料的頁碼-->")

# ---------------------------------------------------------------------------------#
# 19. 在昨天最後一題的基礎上.把資料寫入到檔案中.並且註冊的時候需要到檔案中判斷是否重
# 復.如果重複提示不能註冊.(升級題)