上一篇文章: Python函數定義與使用
下一篇文章: Python模塊
實例:python
class People(): """定義一個People類""" #__init__方法是類建立對象時默認運行的函數,用來進行初始化操做,不須要手動調用 def __init__(self,name,age): """初始化屬性""" self.name=name self.age=age def run(self): print("%s,快跑,帥到被人砍"%self.name) #定義對象 mark=People("mark",18) mark.run() #返回對象在內存中的地址 print(mark)
結果:segmentfault
mark,快跑,帥到被人砍 <__main__.People object at 0x103b5c1d0>
若是直接print(對象),會直接返回該對象在內存中的地址,如今咱們想要不直接返回這個地址呢?
實例:函數
class People(): """定義一個People類""" #__init__方法是類建立對象時默認運行的函數,用來進行初始化操做,不須要手動調用 def __init__(self,name,age): """初始化屬性""" self.name=name self.age=age def run(self): print("%s,快跑,帥到被人砍"%self.name) def __str__(self): msg="我是一個類的介紹,個人做者是個大帥哥🤓️" return msg #定義對象 mark=People("mark",18) mark.run() #返回對象在內存中的地址 print(mark)
結果:code
mark,快跑,帥到被人砍 我是一個類的介紹,個人做者是個大帥哥🤓️
只須要在屬性變量名或方法名前加上__就表示是私有的了,簡單吧😄
實例對象
class People(): """定義一個People類""" #__init__方法是類建立對象時默認運行的函數,用來進行初始化操做,不須要手動調用 def __init__(self,name,age): """初始化屬性""" #私有屬性name self.__name=name self.age=age def run(self): self.__test() def __test(self): print("%s,快跑,帥到被人砍" % self.__name) def __str__(self): msg="我是一個類的介紹,個人做者是個大帥哥🤓️" return msg #定義對象 mark=People("mark",18) mark.run() #返回對象在內存中的地址 print(mark)
結果:繼承
mark,快跑,帥到被人砍 我是一個類的介紹,個人做者是個大帥哥🤓️
對象被銷燬時調用
實例:內存
class People(): """定義一個People類""" #__init__方法是類建立對象時默認運行的函數,用來進行初始化操做,不須要手動調用 def __init__(self,name,age): """初始化屬性""" #私有屬性name self.__name=name self.age=age def run(self): self.__test() def __test(self): print("%s,快跑,帥到被人砍" % self.__name) def __str__(self): msg="我是一個類的介紹,個人做者是個大帥哥🤓️" return msg def __del__(self): print("%s由於太帥了,要被幹掉了"%self.__name) #定義對象 mark=People("mark",18) mark.run() #返回對象在內存中的地址 print(mark) #刪除銷燬對象 del mark
結果:get
mark,快跑,帥到被人砍 我是一個類的介紹,個人做者是個大帥哥🤓️ mark由於太帥了,要被幹掉了
私有方法和屬性不會被繼承
實例:it
class Animal(): def __init__(self,name,age): self.__name=name self.age=age class Dog(Animal): def __init__(self,name,age): #調用父類方法 super().__init__(name,age) def getAge(self): print("小狗年齡:",self.age) dog=Dog(name="xDog",age=5) dog.getAge()
結果:class
小狗年齡: 5
實例:
#python默認全部類都繼承object,可寫可不寫 class Base(object): def test(self): print("Base--test") class A(Base): def test(self): print("A--test") class B(Base): def test(self): print("B--test") class C(A,B): #pass表示暫時不寫代碼 pass c=C() c.test()
結果:
A--test
實例:
#python默認全部類都繼承object,可寫可不寫 class Base(object): #共有類屬性 name="mark" #私有類屬性 __age=18#個人年齡是保密的喲 pass base=Base() print(base.name) print(Base.name) #下面兩句句運行錯誤,不能在類外訪問私有屬性 #print(base.__age) #print(Base.__age)
結果:
mark mark
修飾器@classmethod來標識類方法,第一個參數必須是類對象修飾符@staticmethod來標識靜態方法
實例:
#python默認全部類都繼承object,可寫可不寫 class Base(object): #共有類屬性 name="mark" #私有類屬性 __age=18#個人年齡是保密的喲 #類方法 @classmethod def changeAge(cls): cls.__age+=1 return cls.__age @staticmethod def staticFun(): return "類靜態方法被調用" base=Base() #實例調用類方法 print(base.changeAge()) #類調用類方法 print(Base.changeAge()) #實例調用類靜態方法 print(base.staticFun()) #類調用類靜態方法 print(Base.staticFun())
結果:
19 20 類靜態方法被調用 類靜態方法被調用
第一個參數必須是類對象。必需要有返回值,返回的是實例化後的對象,能夠return 父類的__new__或者object的這個方法。
實例:
class Base(object): def __init__(self): print("__init__被調用了") def __new__(cls, *args, **kwargs): print("__new__被調用了") return super().__new__(cls) base=Base()
結果:
__new__被調用了 __init__被調用了