Python類的定義與操做

Python類的定義與操做

上一篇文章: Python函數定義與使用
下一篇文章: Python模塊

一、定義類、建立對象、__init__

實例: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>

二、__str__:定義類的描述

若是直接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,快跑,帥到被人砍
我是一個類的介紹,個人做者是個大帥哥🤓️

四、__del__():析構函數

對象被銷燬時調用

實例:內存

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
類靜態方法被調用
類靜態方法被調用

八、__new__:建立實例時調用

第一個參數必須是類對象。

必需要有返回值,返回的是實例化後的對象,能夠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__被調用了
相關文章
相關標籤/搜索