1.面向過程和面向?qū)ο蟮膮^(qū)別
為石柱土家族等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及石柱土家族網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、石柱土家族網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
面向過程 : 需要用什么代碼去解決什么問題
面向?qū)ο?: 我有什么可以給你什么
2.面向?qū)ο蟮奶卣?/p>
(1)封裝
數(shù)據(jù)不想讓別人接觸到的
函數(shù)(過程) =》 方法(在面向?qū)ο笾校禾峁┖瘮?shù)、方法對數(shù)據(jù)進(jìn)行訪問和操作
(2)繼承
有一塊代碼塊 A(函數(shù))
B 也想有一個(gè)代碼塊(函數(shù))
(3)多態(tài)
一個(gè)對象可以體現(xiàn)不同的特征
3. 實(shí)驗(yàn)
創(chuàng)建一個(gè)類
>>> class Person(object): ... pass ...
創(chuàng)建一個(gè)實(shí)例對象
>>> kk = Person() >>> type(kk)
創(chuàng)建實(shí)例對象的屬性
>>> kk.name = 'kk' >>> dir(kk) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',\ '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'\ , 'name']
定義類的屬性
>>> class person(object): ... name = 'kk' ... >>> kk = person() >>> kk.name 'kk'
類、實(shí)例對象查找屬性也是有順序的:先在實(shí)例對象中找,如果實(shí)例對象中沒,接著去類中屬性找,如果類中屬性沒的話就報(bào)錯(cuò)了
小案例: 更好的區(qū)分類的屬性和實(shí)例對象的屬性
創(chuàng)建一個(gè)類
>>> class Person(object): ... name = 'kk' ...
創(chuàng)建實(shí)例對象name1 并給實(shí)例對象添加 addr 屬性
>>> name1 = Person() >>> name1.addr = '西安市'
創(chuàng)建實(shí)例對象name2 并給實(shí)例對象添加 age 屬性
>>> name2 = Person() >>> name2.age = 25
測試訪問name1 的age 屬性 是報(bào)錯(cuò)的 因?yàn)?實(shí)例對象name1和類中都沒有age屬性
>>> name1.age Traceback (most recent call last): File "", line 1, in AttributeError: 'Person' object has no attribute 'age'
分別打印類、實(shí)例對象name1、實(shí)例對象name2的name屬性
>>> print(person.name,name1.name,name2.name) kk kk kk
給實(shí)例對象name1重新設(shè)置一下name 屬性,在依次打印name屬性
>>> print(person.name,name1.name,name2.name) kk kk1 kk
案例總結(jié):
(1)類的屬性和實(shí)例的屬性可以動態(tài)賦值
(2)在訪問實(shí)例對象的屬性時(shí),優(yōu)先訪問實(shí)例對象的屬性;當(dāng)實(shí)例對象的屬性不存在的時(shí)候,去訪問類的屬性,類的屬性不存在就報(bào)錯(cuò)
(3)實(shí)例對象設(shè)置和修改屬性的時(shí)候,不會影響類的屬性
4.類
初始化函數(shù)(構(gòu)造函數(shù))
以下類中的初始化函數(shù)
>>> class person(object): ... def __init__(self): ... self.name = 'kk' ... self.age = 24 ...
創(chuàng)建一個(gè)實(shí)例對象
>>> name1 = person() >>> name1.name 'kk' >>> name1.age 24
重新創(chuàng)建一個(gè)類
>>> class person(object): ... name = 'Dog' ... def __init__(self): ... self.name = 'dog' ...
分別打印類和實(shí)例對象的name屬性
>>> name1 = person() >>> print(name1.name, person.name) dog Dog
類的方法,如下創(chuàng)建類的方法
>>> class Test(object): ... Name = 'Test' ... @classmethod ... def class_method(cls): ... print(cls.Name) ...
訪問類的方法
>>> Test.class_method() Test
創(chuàng)建實(shí)例對象test ,實(shí)例對象訪問類的方法
>>> test = Test() >>> test.class_method() Test
實(shí)例的方法
>>> class Test(object): ... Name = 'Test' ... def __init__(self): ... self.name = 'test' ... def instance_method(self): ... print(self.name) ... print(self.Name) ..
訪問實(shí)例的方法
>>> t = Test() >>> t.instance_method() test Test
靜態(tài)方法 (@staticmethod)
>>> class Test(object): ... @staticmethod ... def static_method(): ... print('static_method') ... >>> Test.static_method() static_method
小案例
貓狗大戰(zhàn),貓的初始生命值是120 , 狗的初始生命值是100,random隨機(jī)掉血,采用繼承的方式
#!/usr/bin/python import random class Animals(object): def __init__(self,name,blood=100): self.name = name self.blood = blood def get_name(self): return self.name def get_blood(self): return self.blood def drop_blood(self,blood): self.blood -= blood def attack(self,rival): drop = random.randint(0,20) rival.drop_blood(drop) print(self.name,'讓',rival.name,'掉血',drop,'對手剩余:',rival.get_blood(),'血') class Dog(Animals): pass class Cat(Animals): pass if __name__ == '__main__': dog = Dog('wangwang') cat = Cat('miaomiao',120) while True: dog.attack(cat) if cat.get_blood() < 0: print('勝利方是:',dog.get_name()) break cat.attack(dog) if dog.get_blood() < 0: print('勝利方是:',cat.get_name()) break
執(zhí)行結(jié)果:
", line 1, in 私有屬性的訪問 @property 和 @方法名.setter的使用 @property 把一個(gè)方法變成屬性去調(diào)用 @方法名.setter是把一個(gè)方法變成屬性賦值 訪問測試>>> kk._Person__age
30
>>> class Person(object):
... def __init__(self,name,age):
... self._name = name
... self._age = age
... @property
... def name(self):
... return self._name
... @name.setter
... def name(self,value):
... self._name = value
...
>>> kk = Person('kk',20)
>>> kk.name
'kk'
>>> kk.name = 'kk1'
>>> kk.name
'kk1'
分享名稱:Python自動化運(yùn)維開發(fā)----基礎(chǔ)(十五)Python面向?qū)ο?
標(biāo)題網(wǎng)址:http://weahome.cn/article/ihehei.html