python類class基礎


          44、class類:
 
                   一、類定義的一般形式:
                           1、簡單的形式:實例化對象沒有自己獨有的數據屬性。
>>> class fistclass():
...     data1 = 'hello world' ### ==>這是類的數據屬性或類成員屬性。
...     def printdata(self): ###==>這是類的方法,而且這里至少有一個參數self!!!
...             print('nihao%s' %self.data1)
...
>>> class1 = fistclass() ##==>類實例化
>>> class1.
class1.__class__(         class1.__format__(        class1.__le__(            class1.__reduce_ex__(     class1.__weakref__
class1.__delattr__(       class1.__ge__(            class1.__lt__(            class1.__repr__(          class1.data1
class1.__dict__           class1.__getattribute__(  class1.__module__         class1.__setattr__(       class1.printdata(
class1.__dir__(           class1.__gt__(            class1.__ne__(            class1.__sizeof__(       
class1.__doc__            class1.__hash__(          class1.__new__(           class1.__str__(           
class1.__eq__(            class1.__init__(          class1.__reduce__(        class1.__subclasshook__( 
>>> class1.data1 ##類數據屬性調用
'hello world'
>>> class1.printdata() ##類的方法的調用
nihaohello world
        2、定義對象獨有的數據屬性:
          >>> class seclass():
...     data1 = 'hello seclass'
...     def setdata(self,x):
...             self.str1 = x
...     def printdata(self):
...             print(self.str1)
...
>>> ins1 = seclass()
>>> ins1.
ins1.__class__(         ins1.__format__(        ins1.__le__(            ins1.__reduce_ex__(     ins1.__weakref__
ins1.__delattr__(       ins1.__ge__(            ins1.__lt__(            ins1.__repr__(          ins1.data1
ins1.__dict__           ins1.__getattribute__(  ins1.__module__         ins1.__setattr__(       ins1.printdata(
ins1.__dir__(           ins1.__gt__(            ins1.__ne__(            ins1.__sizeof__(        ins1.setdata(
ins1.__doc__            ins1.__hash__(          ins1.__new__(           ins1.__str__(           
ins1.__eq__(            ins1.__init__(          ins1.__reduce__(        ins1.__subclasshook__( 
>>> ins1.data1
'hello seclass'
          >>> ins1.setdata('abc')
>>> ins1.printdata()
abc
>>> ins2 = seclass()
>>> ins2.data1
'hello seclass'
>>> ins2.setdata('xy')
>>> ins2.printdata()
xy
   3、__init__()方法:
     創建實例時,python會自動調用類中的__init__方法,以隱性的為實例提供屬性。
     __init__稱之為構造器。
     如果類中沒有定義__init__方法,則實例之初僅僅是創建一個簡單的名稱空間。
     >>> class thirdclass():
...     data3 = 'hello thirdclass'
...     def __init__(self,who):
...             self.name = who
...
>>> ins3 = thirdclass('lucy')
>>> ins3.
ins3.__class__(         ins3.__format__(        ins3.__le__(            ins3.__reduce_ex__(     ins3.__weakref__
ins3.__delattr__(       ins3.__ge__(            ins3.__lt__(            ins3.__repr__(          ins3.data3
ins3.__dict__           ins3.__getattribute__(  ins3.__module__         ins3.__setattr__(       ins3.name
ins3.__dir__(           ins3.__gt__(            ins3.__ne__(            ins3.__sizeof__(       
ins3.__doc__            ins3.__hash__(          ins3.__new__(           ins3.__str__(           
ins3.__eq__(            ins3.__init__(          ins3.__reduce__(        ins3.__subclasshook__( 
>>> ins3.data3
'hello thirdclass'
>>> ins3.name
'lucy'
   4、__dict__:
     >>> ins3.__dict__ 實例的屬性
{'name': 'lucy'}
>>> thirdclass.__dict__ 類的屬性。
mappingproxy({'data3': 'hello thirdclass', '__init__': <function thirdclass.__init__ at 0x7f8e0a440ea0>, '__dict__': <attribute '__dict__' of 'thirdclass' objects>, '__module__': '__main__', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'thirdclass' objects>})
   5、類中的可用變量:
     >>> class c1():
...     var1 = 'hello c1' ###==>類的靜態變量!!!!
...     def __init__(self,who):
...             self.insdata = who ###==>實例變量。
...             self.name = '123' ###==>局部變量:只屬於這個方法。
...
>>> ins1 = c1(12)
>>> ins1.
ins1.__class__(         ins1.__format__(        ins1.__le__(            ins1.__reduce_ex__(     ins1.__weakref__
ins1.__delattr__(       ins1.__ge__(            ins1.__lt__(            ins1.__repr__(          ins1.insdata
ins1.__dict__           ins1.__getattribute__(  ins1.__module__         ins1.__setattr__(       ins1.name
ins1.__dir__(           ins1.__gt__(            ins1.__ne__(            ins1.__sizeof__(        ins1.var1
ins1.__doc__            ins1.__hash__(          ins1.__new__(           ins1.__str__(           
ins1.__eq__(            ins1.__init__(          ins1.__reduce__(        ins1.__subclasshook__( 
>>> ins1.name
'123'
>>> ins1.var1
'hello c1'
>>> ins1.insdata
12
   6、類的繼承:python允許多重繼承,屬性搜索方法:從左往右,從下往上。
     >>> class PClass(object):
...     gender = 'male'
...     def __init__(self,who):
...             self.name = who
...
>>> class CClass(PClass):
...     def displayinfo(self):
...             print(self.gender,self.name)
...
>>> ins1 = CClass('lucy')
>>> ins1.
ins1.__class__(         ins1.__format__(        ins1.__le__(            ins1.__reduce_ex__(     ins1.__weakref__
ins1.__delattr__(       ins1.__ge__(            ins1.__lt__(            ins1.__repr__(          ins1.displayinfo(
ins1.__dict__           ins1.__getattribute__(  ins1.__module__         ins1.__setattr__(       ins1.gender
ins1.__dir__(           ins1.__gt__(            ins1.__ne__(            ins1.__sizeof__(        ins1.name
ins1.__doc__            ins1.__hash__(          ins1.__new__(           ins1.__str__(           
ins1.__eq__(            ins1.__init__(          ins1.__reduce__(        ins1.__subclasshook__( 
>>> ins1.gender
'male'
>>> ins1.name
'lucy'
>>> ins1.displayinfo()
male lucy


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM