1. 程式人生 > 實用技巧 >Python基礎彙總003--Python面向物件即類(Class)相關的知識點彙總---類的定義、物件的建立和使用、類的屬性和方法

Python基礎彙總003--Python面向物件即類(Class)相關的知識點彙總---類的定義、物件的建立和使用、類的屬性和方法

1.類和物件的基本概念

面向物件的思想中提出了兩個概念,即類和物件。類是對某一類事物的抽象描述,是一種抽象的資料型別,一種模板。而物件用於表示現實中該類事物的個體,也就是具體化了類的描述。它們的關係是,物件是類的具體例項,類是物件的模板。物件根據類建立,一個類可以建立多個物件。比如我定義了一個學生類,那麼通過類創建出來的小明、小王就叫物件。

(1)類的定義

在Python中使用class關鍵字定義一個類,類的主體由屬性(變數)和方法(函式)組成。通過定義一個學生類來學習下Python類的定義方法,如下:

# 類的建立
class Student(object):
    count = 0  #
類屬性 def __init__(self, name, age): # __init__為類的建構函式 self.name = name # 例項屬性 self.age = age # 例項屬性 def output(self): # 例項方法 print(self.name) print(self.age)

上述例子中Student是類名,__init__()函式是建構函式,count、name、age是類中定義的屬性,output(self)是類中定義的方法。

(2)物件的建立和使用

定義完Student類之後,就可以建立物件。

要建立類的例項,可以使用類名呼叫該類,並傳遞其__init__方法接受的任何引數

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)


if __name__
== '__main__': stu1 = Student('Zhangsan', 18) # 使用Student類物件stu1 print("stu1.name = %s" % (stu1.name,)) # 利用物件stu1獲取物件屬性name。輸出stu1.name = Zhangsan print("stu1.age = %d" % (stu1.age,)) # 利用物件stu1獲取物件屬性age。輸出stu1.age = 18 stu1.output() # 利用物件stu1呼叫output方法。

控制檯輸出:

例項化物件之後,就可以通過物件直接呼叫物件的屬性和方法。但是注意的是物件呼叫方法時,不需要給引數self賦值,self引數用於表示指向例項物件本身。

到這裡,已經學會了類的定義和物件建立方法和使用了

2.類屬性和例項屬性

類的屬性是對資料的封裝,類中定義的屬性包括例項屬性、類屬性兩種。上述例子中count變數屬於類屬性,name、age屬於例項屬性。類變數可以在該類的所有例項中被共享。二者在定義和使用上區別主要如下:

(1)類屬性定義在類中但是在方法外的變數,例項屬性通常定義在建構函式__init__內。

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

(2)類屬性屬於類本身,可以通過類名進行訪問/修改,也可以被類的所有例項訪問/修改。

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)


if __name__ == '__main__':
    stu1 = Student('Zhangsan', 18)  # 使用Student類物件stu1
    stu1.count=100
    print("stu1.count = %s" % (stu1.count,))
    Student.count=20
    print("Student.count = %s" % (Student.count,))

控制檯輸出:

(3)例項屬性只能通過例項訪問。

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)


if __name__ == '__main__':
    stu1 = Student('Zhangsan', 18)  # 使用Student類物件stu1
    print("stu1.age = %d" % (stu1.age,))  # 利用物件stu1獲取物件屬性age。輸出stu1.age = 18
    print("Student.age = %d" % (Student.age,))  # 報錯,不能通過類直接訪問例項屬性

控制檯輸出:

3.例項方法、類方法和靜態方法

自定義的一個類中,可能出現三種方法,例項方法、靜態方法和類方法,下面來看下三種方法的定義和使用區別。

(1)例項方法

例項方法的第一個引數必須是"self"例項方法只能通過物件呼叫

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)


if __name__ == '__main__':
    stu1 = Student('Zhangsan', 18)  # 使用Student類物件stu1
    print("stu1.age = %d" % (stu1.age,))  # 利用物件stu1獲取物件屬性age。輸出stu1.age = 18
    stu1.output()  # 利用物件stu1呼叫output方法。

其中output()方法即為例項方法,必須帶一個引數self,呼叫時不必給該引數賦值。

控制檯輸出:

(2)靜態方法

靜態方法使用函式@staticmethod修飾器定義。定義和使用方式如下:

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)

    @staticmethod  # 方法一,定義類方法,呼叫類變數,getPrice中不帶self引數
    def getCount():
        print(Student.count)


if __name__ == '__main__':
    stu1 = Student('Zhangsan', 18)  # 使用Student類物件stu1
    print("stu1.age = %d" % (stu1.age,))  # 利用物件stu1獲取物件屬性age。輸出stu1.age = 18
    stu1.getCount()  # 利用物件stu1呼叫getCount()方法。

對於靜態方法和類方法,可以通過類名和物件兩種方式進行呼叫。

4.類的專有方法

(1)__init__ :建構函式,在生成物件時呼叫

類有一個名為 __init__() 的特殊方法(構造方法),該方法在類例項化時會自動呼叫

# 類的建立
class Student(object):
    count = 0  # 類屬性

    def __init__(self, name, age):  # __init__為類的建構函式
        self.name = name  # 例項屬性
        self.age = age  # 例項屬性

    def output(self):  # 例項方法
        print(self.name)
        print(self.age)


if __name__ == '__main__':
    stu1 = Student('Zhangsan', 18)  # 使用Student類物件stu1
    print("stu1.age = %d" % (stu1.age,))  # 利用物件stu1獲取物件屬性age。輸出stu1.age = 18

(2)__call__:函式呼叫

Python中有一個有趣的語法,只要定義型別的時候,實現__call__函式,這個型別就成為可呼叫的。 換句話說,我們可以把這個型別的物件當作函式來使用,相當於 過載了括號運算子。我們可以 例項物件()

class TestCall(object):
    def __init__(self, name):
        self.name = name

    def __call__(self, *args, **kwargs):
        print("self.name: %s. " % self.name, end='   ')
        print('__call__()  is  running ')


if __name__ == '__main__':
    call = TestCall(name='xiaoming')
    call()  # call()與call.__call__()是等價的
    call.__call__()

控制檯輸出:

參考文獻:

https://www.cnblogs.com/linyfeng/p/9185785.html