python學習6 -對象

來源:互聯網
上載者:User

標籤:created   私人方法   nbsp   同名   sel   代碼塊   log   pmf   範圍   

python  --物件導向的語言,其最大的特性 為  封裝,繼承,多態。

封裝:封裝可以不關心對象是如何構建的而直接進行使用。是對全域範圍中其他地區隱藏多餘資訊的原則  

定義類:

1 >>> class Person():2     def setName(self,name):3         self.name = name4     def getName(self):5         return self.name6     def greet(self):7         print ‘hello i am %s‘ % self.name

  self : 是對對象自身的引用,是 方法(更專業點的可稱為 Binder 方法) 和 函數的區別

1 >>> foo = Person()2 >>> bar  = Person()3 >>> foo.setName(‘zhang‘)4 >>> bar.setName(‘di‘)5 >>> foo.greet()6 hello i am zhang7 >>> bar.greet()8 hello i am di

  特性可以在外部存取

1 >>> foo.name2 ‘zhang‘3 >>> bar.name4 ‘di‘5 >>> bar.name = ‘lu‘6 >>> bar.greet()7 hello i am lu

   私人方法,類外部不可調用,內部可調用,用 "__"開頭即可

 1 class Service: 2     def __a(self): 3         print "you can‘t see me" 4  5     def b(self): 6         print "you can see me" 7         self.__a() 8          9 >>> s = Service()10 >>> s.__a()11 12 Traceback (most recent call last):13   File "<pyshell#29>", line 1, in <module>14     s.__a()15 AttributeError: Service instance has no attribute ‘__a‘16 >>> s.b()17 you can see me18 you can‘t see me

   類的定義其實就是執行代碼塊

1 >>> class a:2     print "a is created"3 4     5 a is created

  注意下面代碼的區別

 1 >>> class MemberCount(): 2     members = 0 3     def init(self): 4         self.members += 1 5     7 >>> m1 = MemberCount() 8 >>> m1.init() 9 >>> m1.members10 111 >>> m2 = MemberCount()12 >>> m2.init()13 >>> m2.members14 115 >>> class MemberCount():16     members = 017     def init(self):18         MemberCount.members += 119        21 >>> m1 = MemberCount()22 >>> m1.init()23 >>> m1.members24 125 >>> m2 = MemberCount()26 >>> m2.init()27 >>> m2.members28 229 >>> m1.members30 2

指定超類 

 1 >>> class Filter: 2     def init(self): 3         self.blocked = [] 4     def filter(self,sequence): 5         return [x for x in sequence if x not in self.blocked] 6  7      8 >>> class SapmFilter(Filter): 9     def init(self):10         self.blocked = [‘SPAM‘]11 12         13 >>> s = SapmFilter()14 >>> s.init()15 >>> s.filter([‘SPAM‘,‘EFF‘,‘A‘,‘SPAM‘])

  調查繼承 想要查看一個類是否是另一個類的子類 ,可以用 內建的 issubclass 函數

 1 >>> issubclass(SapmFilter,Filter) 2 True 3 >>> issubclass(Filter,SapmFilter) 4 False 5 #查看已知類的父類 6 >>> SapmFilter.__bases__ 7 (<class __main__.Filter at 0x0299B0D8>,) 8 >>> s = SapmFilter() 9 #查看 對象是否是類的執行個體10 >>> isinstance(s,SapmFilter)11 True12 >>> isinstance(s,Filter)13 True14 >>> isinstance(s,str)15 False

  多個超類  多重繼承  盡量少用,且如果一個方法如果從多個超類繼承(也就是兩個超類具有相同名字的不同方法),先繼承類中的方法會重寫後繼承類中的方法

 1 >>> class A: 2     def aa(self): 3         print "this is a" 4  5          6 >>> class B: 7     def bb(self): 8         print "this is b" 9 10         11 >>> class c(A,B):12     pass13 14 >>> cc = c()15 16 17 >>> cc.aa()18 this is a19 >>> cc.bb()20 this is b21 22 >>> c.__bases__23 (<class __main__.A at 0x0299B148>, <class __main__.B at 0x0299B1B8>)

 

python學習6 -對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.