类及对象
在類中一開始聲明成員不加'self',可將其理解為類成員,訪問使用 類名或者實例名字.變量
def MemberCounter:member = 0def __init__(self):MemberCount.members += 1m1 = MemberCounter() print MemberCounter.memberOutput: 1m2 = MemberCounter() print MemberCounter.memberOutput: 2類成員變量是不可變(字符串,元組, 數字變量等)或者可變(列表,字典等)在類內部使用的區別
#!/usr/bin/env/ python # -*- coding: utf-8class MemberCounter:members = 0objlist = []objturple = (3,)def __init__(self):#此處只能用MemberCounter.membersMemberCounter.members += 1#此處使用self.objlist或者MemberCounter.objlist均可self.objlist.append('1')m1=MemberCounter() print MemberCounter.members, MemberCounter.objlist print m1.members, m1.objlistm2=MemberCounter()print MemberCounter.members,MemberCounter.objlist print m2.members, m2.objlist輸出:
1 ['1'] 1 ['1'] 2 ['1','1'] 2 ['1','1']但是在外部使用的時候采用'類名或者實例名字.變量'的形式(如MemberCounter.objlist),兩者的區別應該和他們做函數參數的原理類似,在列表/字典做函數參數的時候,函數可以改變實參的值,但是字符串或者數字變量等作為函數參數時,在函數使用會拷貝副本,外部的變量保持原值.
類作用域的變量可以被所有的實例訪問,但是在實例中重新綁定members?
m1.members = "Two" print m1.members print m2.members輸出:
Two
2
新的numbers被寫到了m1特性中,相當于創建了m1中的self.members, 屏蔽了類范圍內的變量.
Note:
1.python能夠改變變量作用域的代碼段是def、class、lamda.
2.if/elif/else、try/except/finally、for/while 并不能涉及變量作用域的更改,也就是說他們的代碼塊中的變量,在外部也是可以訪問的
繼承
檢查繼承 eg:issubclass(SPAMFilter, Filter)
得到類的基類: SPAMFilter.__bases__
檢查一個對象是否為一個類的實例: isinstance()
對象屬于那個類 : s.__class__ 或者type(s)
查看對象所存儲的值:使用__dict__特性
多重繼承
eg:class TalkingCalculator(Talker,Calculator):pass 如果一個類從多個超類繼承(具有兩個相同名字的不同方法),需要注意一下超類的順序:先繼承的類中的方法會重寫后繼承類的方法.轉載于:https://www.cnblogs.com/rogerjin/p/7060915.html
總結
- 上一篇: selenium+python中,框架中
- 下一篇: 数据结构——树的简单操作集合