1. 程式人生 > >模組,類和物件

模組,類和物件

很顯然,在學習類與物件之前,我們得知道一些面向物件術語。

'''

(class):告訴Python建立新型別的東西。

物件(object):兩個意思,即最基本的東西,或者某個東西的例項,不唯一,可以self等

例項(instance):這是讓Python建立一個類時得到的東西。

def:這是在類裡邊定義函式的方法。

self:在類的函式中,self指代被訪問的物件或者例項的一個變數,不唯一。

繼承(inheritance):指一個類可以繼承另一個類的特性,和父子關係類似。

組合(composition):指一個類可以將別的類作為它的部件構建起來,有點兒像車子和車輪的關係。

屬性

(attribute):類的一個屬性,它來自於組合,而且通常是一個變數。

是什麼(is-a):用來描述繼承關係,如金魚is a 魚

有什麼(has-a):用來描述某個東西是由另外一些東西組成的,或者某個東西有某個特性。如金魚 has a 嘴

'''

接下來我會給一些語彙練習,可以加深你們對類與物件的一些理解:

'''

class X(Y):建立一個叫X的類,它是Y的一種。

class X(object):

    def __init__(self,J): 類X有一個__init__接收self和J作為引數。

class X(object):

    def M(self,J): 類X有一個函式名稱為M,它接收self和J作為引數。

foo=X(): 將foo設為類X的一個例項。

foo.M(J): 從foo中找到M函式,並使用self和J引數呼叫它。

foo.K=Q: 從foo中獲取K屬性,並將其設為Q。

'''

仔細閱讀這段話,它會幫助你加深理解類與物件。

我們可以把一些變數改成問號,得出一個公式:

'''

1.建立一個叫???的類,它是Y的一種。

2.類???有一個__init__,能接收self和???作為引數。

3.類???有一個函式名稱為???,可以接收self和???作為引數。

4.將foo設為class???的一個例項。

5.從foo中找到???函式,並使用self和???引數呼叫它。

6.從foo中獲取???屬性,並將其設為???。

'''

現在你能理解了嗎?建議動手寫一個類與物件的程式碼函式吧!

以下是我動手嘗試寫的程式碼:

class Parents(object):     #定義一個家長類

 

    def __init__(self,name,age,child_name,child_age):          #這個家長類的屬性是姓名,年齡,孩子姓名和孩子年齡。

        self.name=name

        self.age=age

        self.child_name=child_name

        self.child_age=child_age

 

    def information(self):        #列印一個例項化物件的資訊的函式

        print('''

        your name is %s.

        your age is %d.

        your child name is %s.

        your child age is %d.

        '''%(self.name,self.age,self.child_name,self.child_age))

Huang=Parents('huangfather',20,'huangpaopao',5)     #建立第一個物件例項化,儲存到變數Huang。

Yan=Parents('yanmother',20,'yanpaopao',5)               #建立第二個物件例項化,儲存到變數Yan。

Huang.information()

Yan.information()

輸出結果:

        your name is huangfather.

        your age is 20.

        your child name is huangpaopao.

        your child age is 5.

 

 

        your name is yanmother.

        your age is 20.

        your child name is yanpaopao.

        your child age is 5.

 

接下來,我們來深入以下類與物件之間的從屬關係。

在編寫專案中,我們實際上是要建立許許多多個類的。

在這些類中,有些是存在聯絡的。

比如is-a關係,金魚 is-a 魚。

比如has-a關係,人 has-a 寵物。

這兩者的關係很好理解吧?

如果把物件引進來的話呢?我們把金魚取名為小麗。

小麗 is-a 魚,這句話沒毛病吧?

但這個時候已經不是類與類之間的關係了,而是物件與類的關係。

此時小麗是類的一個例項化出來的物件,也就是說,小麗是金魚的一個例項。

我們把寵物取名為二哈,人 has-a 二哈,這也是類與物件之間的聯絡。

如果把人命名為大明, 

大明 has-a 二哈,這個就是物件與物件之間的聯絡,因為兩者都是例項。

所以我們整理一下:金魚、魚、人和寵物都是類,小麗、二哈和大明都是物件。

 

上段文字你一下子看完你可能會感覺太繞了,我不如放一段程式碼,注意看我的註釋行動:

#Animal is-a object

class Animal(object):

    pass

 

#DOG is-a Animal

class Dog(Animal):

    def __init__(self,name):

        self.name=name

 

#Cat is-a Animal

class Cat(Animal):

    def __init__(self,name):

        self.name=name

 

#Person is-a object

class Person(object):

    def __init__(self,name):

        self.name=name

        #Person has-a pet of some kind

        self.pet=None

 

#Employee is-a Person

class Employee(Person):

    def __init__(self,name,salary):

        super(Employee,self).__init__(name)

        #Employee has-a salary

        self.salary=salary

 

#Fish is-a object

class Fish(object):

    pass

 

#Salmon is-a Fish

class Salmon(Fish):

    pass

 

#Halibut is-a Fish

class Halibut(Fish):

    pass

 

#rover is-a Dog

rover = Dog("Rover")

 

#satan is-a Cat

satan = Cat("Satan")

 

#Mary is-a Person

mary = Person("Mary")

 

#Mary has-a Cat pet

mary.pet=satan

 

#Frank has-a 120000 salary

frank=Employee("Frank",120000)

 

#frank has-a DOG pet

frank.pet=rover

 

#filpper is-a Fish

flipper = Fish()

 

#crouse is-a Salmon

crouse = Salmon()

 

#harry is-a Halibut

harry =Halibut()

 

好好看這段程式碼以及我的註釋,希望能對你理解類與類的聯絡,類與物件的聯絡和物件與物件的聯絡有所幫助。