真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python面向?qū)ο蟆⒏鞣N名詞解釋(類、對象、實(shí)例、實(shí)例化)、-創(chuàng)新互聯(lián)

一、類和對象的含義、二者關(guān)系 1、類

類就是一群具有相同特征或者行為的事物的一個統(tǒng)稱,是抽象的,并且不能直接使用,需要創(chuàng)建一個對象。比如,人、動物就是一個類。類的特征被稱為屬性,類的行為動作被稱為方法。

創(chuàng)新互聯(lián)建站專注于阜城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。阜城網(wǎng)站建設(shè)公司,為阜城等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

對于人這個類來說,人的身高、體重、姓名、年齡就是人的屬性;而人能吃喝拉撒睡、能跑、能跳就是人的方法。對于動物這個類來說,動物的顏色、體重就是它的屬性,動物能吃能睡能跑能跳就是它的方法。

再抽象點(diǎn),類就好比是制造汽車、輪船時候畫出來的圖紙,我們把汽車/輪船的尺寸大小、長寬、幾個輪子幾個窗戶畫在圖紙上,那么這些就是它的屬性。而按照圖紙最終制造出來的汽車,能開能走能轉(zhuǎn)彎這些就是它的方法。這些最終根據(jù)圖紙制造出來的汽車就叫對象。

2、對象

對象就是由類創(chuàng)建出來的一個具體存在,可以直接使用。一個類,可以創(chuàng)建出來很多個對象,每個對象的屬性的值,可能會不一樣。由哪一個類創(chuàng)建出來的對象,就擁有那個類里面所定義的屬性和方法。比如,張三、李四這些都是人這個類的對象,他們都有身高體重年齡(這就叫擁有類里面的屬性),他們都能吃喝拉撒睡、能跑能跳(這就叫擁有類里面的方法)。

3、對象和類的關(guān)系

(1)先有類,再有對象。直白點(diǎn)來說,類是模板,而對象是根據(jù)類這個模板創(chuàng)建出來的。

(2)類只有一個,而對象可以有很多個。(比如,張三、李四就是對象,他們都屬于人這一個類。再比如,根據(jù)汽車圖紙可以制造出來成千上萬臺汽車。)

(3)不同的對象之間,屬性的值可能會不一樣。(比如,張三、李四、名字不一樣,身高、體重、年齡可能都不一樣。再比如,汽車造出來了,但它的顏色可能會不一樣,有的是黑色,有的是白色。但功能、性能、外觀尺寸這些都是一樣的。)

(4)類里面定義了什么屬性和方法,那么對象中就有什么屬性和方法。

二、類的設(shè)計(jì)

面向?qū)ο缶幊讨?,首先需要設(shè)計(jì)類,對于類的設(shè)計(jì),需要明白的是,如何設(shè)計(jì)一個類?通常包含三個要素:類名、屬性、方法。

1、類名就是這類事物的名字。比如,人就是一個類。

2、屬性——類里面的變量

這類事物都有哪些特征?這就是屬性,比如,人名、身高、體重、性別就是屬性。說白了,屬性就是一個變量,把這個變量放到類里面,稱呼就變了,就不叫變量了,得叫屬性。這樣的叫法是為了在程序中能更好的和普通變量進(jìn)行區(qū)分。屬性一般是個名稱,是個名詞,比如:顏色、身高、名字。

3、方法——類里面的函數(shù)

這類事物都有哪些行為?這就是方法。比如,人能吃喝拉撒睡、能跑能跳,這就是方法。說白了,方法就是一個函數(shù)。在類里面出現(xiàn)的函數(shù)就叫方法。這樣叫法是為了在一個程序中,能更好的和普通函數(shù)進(jìn)行區(qū)分。方法一般是個動作,是個動詞,比如:跑、跳、走。

技巧:在類里面出現(xiàn)的變量叫屬性,在類里面出現(xiàn)的函數(shù)叫方法。

三、類的實(shí)現(xiàn)——利用class關(guān)鍵字創(chuàng)建一個類

語法格式:

class 類名:? ? # 大駝峰法

? def __init__(self,參數(shù)1="默認(rèn)值1",參數(shù)2="默認(rèn)值2",....):

? self.參數(shù)1=參數(shù)1? ? ? ? #?定義屬性、給類添加屬性

?????self.參數(shù)2=參數(shù)2

? def 方法1(self,參數(shù)1,參數(shù)2...): # 定義方法

? 要執(zhí)行的代碼

對象名=類名(參數(shù)1,參數(shù)2....)? ? # 創(chuàng)建一個對象

對象名.方法1(參數(shù)1,參數(shù)2...)

對象名.參數(shù)1=值

注意:方法的定義和普通函數(shù)一模一樣,不同的是,方法的第一個參數(shù)必須是self,這是python語法規(guī)定的。self就表示調(diào)用方法的對象自己。

舉例:定義一個Person類,它有name屬性,eat方法。

class Person:  # 定義一個person類
    def __init__(self, name="張三"):  # 初始化方法中,定義一個形參name
        self.name = name  # self.name中的name表示一個屬性,名字叫name,而等號后面的name表示形參

    def eat(self):  # 定義一個eat方法
        print("%s在吃飯" % self.name)  # 調(diào)用name屬性


p1 = Person("李四")  # 創(chuàng)建一個對象,名字叫p1,后面的李四就是實(shí)參,把它賦給形參name
p1.eat()
p2 = Person()  # 又創(chuàng)建了個對象,名字叫p2,()里面啥都沒寫,表示取默認(rèn)值,張三
p2.eat()

結(jié)果:
李四在吃飯
張三在吃飯

解析:
(1)在上面的代碼中,就很好的體現(xiàn)了,類只有一個,對象可以有多個,也體現(xiàn)了,不同的對象之間屬性可能不相同。(即:都有name屬性,但一個叫張三一個叫李四)。

(2)__init__(self)是個初始化方法,一般常用來定義屬性。這樣的好處是,在創(chuàng)建完對象之后,能自動調(diào)用這個方法。

(3)定義方法時,第一個形參必須是self。

(4)在類的內(nèi)部,無論是定義屬性,還是調(diào)用屬性,屬性名前面要加self ,只有這樣才叫屬性。

此外,在調(diào)用方法的時候(也就是方法的嵌套,即一個方法里面嵌套另外一個方法),也要加self。

例如:初始化方法中定義name屬性,eat方法中,調(diào)用這個屬性,demo方法中調(diào)用eat方法。

class Person:  
    def __init__(self, name="張三"):  
        self.name = name  # self.name表示一個屬性,等號后面的name表示形參

    def eat(self):  # 定義一個eat方法
        print("%s在吃飯" % self.name)  # 調(diào)用屬性

    def demo(self):
        self.eat()   # 方法里面調(diào)用方法——方法的嵌套


p = Person()
p.demo()

結(jié)果:
張三在吃飯

(5)類是靜態(tài)的,只有創(chuàng)建為對象后,才能稱為動態(tài)運(yùn)行的程序。

(6)在類的外部,對象在調(diào)用類的屬性或者方法時,不加self。直接對象名.屬性名=值或?qū)ο竺?方法名(參數(shù)) 。

例如:

class Person:
    def __init__(self, name="張三"):
        self.name = name  

    def eat(self):  # 定義一個eat方法
        print("%s在吃飯" % self.name)  # 調(diào)用屬性

    def demo(self):
        self.eat()  # 方法里面調(diào)用方法——方法的嵌套


p = Person()
p.name = "小明"  # 對象調(diào)用類的屬性
p.demo()  # 對象調(diào)用類的方法

結(jié)果:
小明在吃飯

注意:這種寫法p = Person("小明")和p = Person()? ? p.name = "小明"結(jié)果是一樣的。第一種寫法是,直接在實(shí)例化時候就寫了實(shí)參,然后傳遞給形參name,而第二種是調(diào)用name屬性再賦值,結(jié)果是一樣的。

帶缺省值的形參:當(dāng)函數(shù)被調(diào)用時,如果有實(shí)參,就采用實(shí)參的值,如果沒有實(shí)參,那就采用缺省值(也就是自己的默認(rèn)值)。

(7)實(shí)例:就是通過類創(chuàng)建出來的對象,就叫類的實(shí)例。

實(shí)例化:創(chuàng)建對象的這個動作就叫實(shí)例化。比如,敲p1?= Person()這行代碼的這個過程,就叫實(shí)例化。

所以,實(shí)例化的結(jié)果就是,創(chuàng)建出來了一個對象。而這個對象呢,就叫類的實(shí)例。

四、類里內(nèi)置的方法 1、__init__? ——用來給類添加屬性、定義類中的屬性
class Dog:
    def __init__(self):     # 不帶形參
        print("Dog被創(chuàng)建了")


a = Dog()
結(jié)果:
Dog被創(chuàng)建了


# 帶形參
class Dog:
    def __init__(self, name="二哈"):
        self.name = name
        print("%s被創(chuàng)建了" % self.name)


d1 = Dog()  # 不帶實(shí)參,形參將用默認(rèn)值
d2 = Dog("柯基")  # 帶實(shí)參,實(shí)參將把值傳遞給形參

結(jié)果:
二哈被創(chuàng)建了
柯基被創(chuàng)建了


#注意:這里的形參name也可以改成其它名字,比如a(但不建議改),因?yàn)檫@里用name只是一種習(xí)慣,一般大家都是這么用的。
class Dog:
    def __init__(self, a="二哈"):
        self.name = a
        print("%s被創(chuàng)建了" % self.name)


d1 = Dog()   # 創(chuàng)建第一個對象
d2 = Dog("柯基")  # 創(chuàng)建第二個對象
結(jié)果:
二哈被創(chuàng)建了
柯基被創(chuàng)建了

注意:

(1)__init__注意寫法,前面后面各兩個下劃線

(2)當(dāng)實(shí)例化對象的時候(也就是使用類名( )創(chuàng)建對象),init方法會自動被調(diào)用。

(3)init方法一旦有形參,實(shí)例化對象的時候就必須提供實(shí)參,否則報錯。但通常情況下,為了避免報錯,init在定義形參的時候,都會帶個缺省值。這樣的話,無論實(shí)例化時候帶不帶實(shí)參,代碼都不會報錯,從而增加了代碼的靈活性。

(4)init方法大的用途就是用來給類添加屬性。也就是在初始化方法中,定義類的屬性。

(5)init方法中,self后面可以有多個形參。

2、__del__? ——當(dāng)對象從內(nèi)存銷毀前,再執(zhí)行一些代碼

(1)del方法只有一個參數(shù)self 。

(2)當(dāng)對象在內(nèi)存中被銷毀的時候,系統(tǒng)自動調(diào)用del方法。

(3)對象即使沒有定義del方法,程序運(yùn)行完畢后也是會被銷毀,只是說,定義del的話,能在代碼執(zhí)行結(jié)束前,或者叫,當(dāng)對象從內(nèi)存中銷毀的時候,再來幫我們輸出點(diǎn)東西,并不是說,沒有del方法對象就不會被銷毀了。

(4)如果對象是局部變量,那么函數(shù)執(zhí)行完畢,就會自動調(diào)用對象的del方法。

如果對象是全局變量,那么程序執(zhí)行完畢,就會自動調(diào)用對象的del方法。

例如:

class Dog:
    def __init__(self, name="二哈"):
        self.name = name
        print("%s被創(chuàng)建了" % self.name)

    def eat(self):
        print("%s在吃東西" % self.name)

    def __del__(self):      # 在對象被銷毀前,再下輸出點(diǎn)東西
        print("%s被銷毀了" % self.name)


def test():  # 在類的外面定義一個函數(shù)
    d = Dog()  # 創(chuàng)建一個對象,名字叫d,d也是一個局部變量
    d.eat()  # 調(diào)用類的方法


test()  # 程序的第一條執(zhí)行語句
a = Dog("柯基")  # 再創(chuàng)建一個對象,名字叫a,a也是一個全局變量, 該對象帶實(shí)參,實(shí)參將把值傳遞給形參

結(jié)果:
二哈被創(chuàng)建了
二哈在吃東西
二哈被銷毀了
柯基被創(chuàng)建了
柯基被銷毀了
3、__str__ ——print(對象名)時候,可以顯示一些想要的信息,而不是顯示內(nèi)存空間

當(dāng)把對象直接放到print里面進(jìn)行輸出的時候,顯示的是對象在內(nèi)存中的地址編號。

例如:

class Dog:
    def __init__(self, name="大黃"):
        self.name = name

d = Dog()
print(d)
結(jié)果:<__main__.Dog object at 0x000002343681D898>

顯然用途不大,怎么讓它顯示我們想要的東西呢?此時就可以用str方法。

例如:我們想在打印對象的時候,讓它輸出屬性值。

class Dog:
    def __init__(self, name="大黃"):
        self.name = name

    def __str__(self):  # str方法,必須返回一個字符串
        return self.name


d = Dog()
print(d) 

結(jié)果:
大黃

注意:

(1)str方法跟del方法一樣,只有一個參數(shù)self。

(2)str方法中,必須要有return,且return返回的必須是一個字符串。

(3)如果類里面沒有str方法,那么把實(shí)例化后的對象用print( )函數(shù)進(jìn)行輸出,顯示的是對象的內(nèi)存地址。而把類里面加上str方法,此時再把實(shí)例化后的對象用print( )函數(shù)進(jìn)行輸出,此時顯示的就是str方法中,return返回的字符串,也就是我們想讓它顯示的內(nèi)容了。

即:str方法主要用來,在print(對象名)時候,能夠顯示我們想要的東西,而不是讓它單純的顯示對象的內(nèi)存地址。

例如:用str與不用str的區(qū)別。

class Dog:
    def __str__(self):      # 加str方法
        return "這個類的名字叫Dog"


a = Dog()
print(a)

結(jié)果:
這個類的名字叫Dog



# 不加str方法
class Dog:
    def __init__(self):
        pass


a = Dog()
print(a)

結(jié)果:<__main__.Dog object at 0x000002BA3D646668>
五、設(shè)計(jì)類的時候常用的一些套路、習(xí)慣、慣例

在定義類里面的方法時候,常有一些習(xí)慣,比如:在類當(dāng)中,如果想得到一個屬性的值,那么方法名就叫g(shù)et_屬性名,然后在方法中,再結(jié)合return;如果想設(shè)置一個屬性的值話,那方法名就叫set_屬性名;如果想顯示一個屬性的值話,那方法名就叫show_屬性名(self,參數(shù)1,參數(shù)2...)。

例如:

class Dog:
    def __init__(self, name="柯基"):
        self.name = name

    def get_name(self):  # 在設(shè)計(jì)類的時候,如果想通過方法得到一個屬性的值,一般都是get_屬性名
        return self.name  # ?。?
    def set_name(self, name):  # 如果想通過方法,設(shè)置一個屬性的值話那就是,set_屬性名(selg,形參)
        self.name = name

    def show_name(self):  # 如果是顯示屬性的值,一般用show_屬性名
        print(self.name)


d = Dog()
print(d.get_name())
結(jié)果:
柯基

注意:沒有return語句的方法或者函數(shù),不要放到print里面,因?yàn)榧词褂胮rint函數(shù)進(jìn)行輸出,結(jié)果也是None。

例如:

class Dog:
    def __init__(self, name="柯基"):
        self.name = name

    def get_name(self):  # 在設(shè)計(jì)類的時候,如果想通過方法得到一個屬性的值,一般都是get_屬性名
        return self.name  # ?。?
    def set_name(self, name):  # 如果想通過方法,設(shè)置一個屬性的值話那就是,set_屬性名(selg,形參)
        self.name = name

    def show_name(self):  # 如果是顯示屬性的值,一般用show_屬性名
        print(self.name)


d = Dog()
print(d.show_name())  # 對象d先調(diào)用show_name()方法,然后再輸出調(diào)用后的結(jié)果

結(jié)果:
柯基
None

解析:為什么會有None?首先,d.show_name()就是說對象調(diào)用show_name()這個方法,這個方法就會打印名字這個屬性,然后就是控制臺所看到的柯基。接著,調(diào)用完這個方法后,又用print函數(shù)進(jìn)行輸出,我們知道,在調(diào)用函數(shù)的時候,只有函數(shù)中有return時候,這個函數(shù)才會有返回值,而show_name()這個函數(shù)內(nèi)部沒有return,所以也就沒有返回值,print時候也就只能顯示None 。

再比如,設(shè)置下屬性值,把狗的名字改成“柴犬”,然后再輸出這個名字。

class Dog:
    def __init__(self, name="柯基"):
        self.name = name

    def get_name(self):  # 在設(shè)計(jì)類的時候,如果想通過方法得到一個屬性的值,一般都是get_屬性名
        return self.name  # ??!

    def set_name(self, name):  # 如果想通過方法,設(shè)置一個屬性的值話那就是,set_屬性名(selg,形參)
        self.name = name

    def show_name(self):  # 如果是顯示屬性的值,一般用show_屬性名
        print(self.name)


d1 = Dog()
d1.set_name("柴犬")
print(d1.get_name())

結(jié)果:
柴犬

練習(xí):設(shè)計(jì)一個計(jì)算器類,實(shí)現(xiàn)基本的加減乘除功能。

class Calculator:  # 定義一個計(jì)算器類
    def __init__(self, operate="+"):
        self.operate = operate

    def calc(self, a, b):
        if self.operate == "+":
            return a + b

        elif self.operate == "-":
            return a - b
        elif self.operate == "*":
            return a * b
        elif self.operate == "/":
            if b != 0:
                return a / b
            else:
                return "除數(shù)為0了,不能進(jìn)行除法運(yùn)算"
        else:
            return "請重新輸入一個運(yùn)算符"


a = input("請輸入一個運(yùn)算符:")
num1 = int(input("請輸入num1:"))
num2 = int(input("請輸入num2:"))
c = Calculator(a)
print(c.calc(num1, num2))

結(jié)果:
請輸入一個運(yùn)算符:/
請輸入num1:15
請輸入num2:0
除數(shù)為0了,不能進(jìn)行除法運(yùn)算


請輸入一個運(yùn)算符:+
請輸入num1:1
請輸入num2:2
3

請輸入一個運(yùn)算符:-
請輸入num1:1
請輸入num2:2
-1


請輸入一個運(yùn)算符:*
請輸入num1:3
請輸入num2:5
15


注意:用a = input("請輸入一個運(yùn)算符:"),此時,init中 operate="+"這個默認(rèn)值就沒有用了。默認(rèn)值的作用就是,當(dāng)c = Calculator()時候,里面不放實(shí)參的時候會自動用默認(rèn)值。
例如,不把a(bǔ)里輸入東西
請輸入一個運(yùn)算符:
請輸入num1:1
請輸入num2:2
請重新輸入一個運(yùn)算符

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前名稱:Python面向?qū)ο蟆⒏鞣N名詞解釋(類、對象、實(shí)例、實(shí)例化)、-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://weahome.cn/article/jishh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部