首頁  >  文章  >  後端開發  >  Python3中類別Class和物件object的理解(程式碼範例)

Python3中類別Class和物件object的理解(程式碼範例)

不言
不言轉載
2018-10-27 16:00:059909瀏覽

這篇文章帶給大家的內容是關於Python3中類Class和物件object的理解(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

類別 是什麼
類別是一個抽象的概念,泛指很多相似的個體組成的,具有共同特徵的事物。例如類別是一個車
,這車就包括各種車型
什麼是物件
類別裡面的具體的一個事物。例如五菱神車S(過彎秒掉GTR的梗還記憶猶新)  ,他是車這個類的具體化,
先有類,才有物件

理解類別和物件

def eating():
    print("吃草")
    
def walking():
    print("走路")

eating()
walking()
#(输出)    吃饭
        走路
    
#这样的话,别人也可以调用你写的函数,但是调用eating() 并不能清除的了解到到底是谁 “吃饭”,
#所以我们输入一个name来明确是谁在吃草。

def eating(name):
    print(name,"吃饭")
eating("zhuozi")            #调用函数
#(输出)zhuozi 吃草

#但是你會發現zhuozi用來吃飯,從邏輯上來說是否有點不妥,雖然他語法上沒問題,
#所以我們將進行一個歸類,將“吃飯”的一類分為一類,也就是類別,所以我們將它進行標記,class Person:
#為什麼P大寫是用來和Python內建函數的類別區別,內建的類別名稱都是小寫字母(可以ctrl 滑鼠左鍵點擊內建函數查看)

class Person:            #这样我们就将eating封装到了Person这个类里面
                        #只要是Person这一类别的都可以进行下面的行为(eating)
    def eating(name):
        print(name,"吃饭")
        
zhangsan = Person()        #这里就不能像以前一样用eating去调用了,因为只有Person这一类的才能就行eating这个行为
                        #所以我们就要先将zhansan定义为Person这一类    
zhangsan.eating()        #然后才能让张三进行吃草这种行为
#(输出)<__main__.Person object at 0x000001D2CCC21160> 吃饭

lisi = Person()            #lisi也要吃饭,那继续定义lisi 是person 类 他可以吃饭
lisi.eating()            #lisi就可以吃饭了
#(输出)<__main__.Person object at 0x000001BCC6BF1198> 吃饭

#打印的一个地址,一个类的地址 object(翻译就是对象)就表示 lisi是这个类的对象
#lisi 就是 Person这个类 实例化的对象。

之前我們def eating(name):的name 就是可以看做誰進行eating ,而這裡語法的硬性要求就是用self 來代表到底是誰來調用eating。所以如下:

class Person:
    def eating(self):
        print(self,"吃饭")
class Person:
    pass
========
list  这里我们ctrl + 鼠标左键点击pycharm 里面书写的list,如图:

Python3中類別Class和物件object的理解(程式碼範例)
可以看出內建的函數的類別名稱都是小寫的,而以前我們用的類別  (列表名稱).append()  也就是我們現在講的類別下面的函數的調用,括號裡面的就是物件名self 而列表名就是實例化的物件。

語法

class 类名(父类列表):        #类名和变量名称的命名是一样的,类名首字母要大写,
                            #用来区别是否是内置函数自带的类
    类体
    
数据属性                        #类的共同属性,名字,性别,干什么的,等等

方法属性                        #这个类共同都有的功能,跑,跳,计算,记录等等
class Person:
    pass

zhangsan = Person()                #张三是Person实例化的对象,所以要开辟一个内存来存储,
                                #即将zhangsan变量名指向这个内存地址
print(zhangsan)
#(输出)<__main__.Person object at 0x00000194D8D28400>

既然实例化对象后开辟了内存,我们就要在里面进行一个存储
class Person:
    pass

zhangsan = Person()
zhangsan.name = "zhangsan"                #给这个实例化的对象附一个名字
print(zhangsan)
#(输出)<__main__.Person object at 0x0000018DF6598400>

print(zhangsan.name)                    #打印出这个对象的名字
#(输出)zhangsan

zhangsan对象名 指向  内存,内存里面有一个属性name,而name指向zhangsan这个名字  两个zhngsan 不一样啊
zhangsan(类的对象名字)  -- 》内存 (name)----》zhangsan(对象的属性)

lisi = Person()                    #再实例化一个对象
lisi.name = "xiaolong"
print(lisi.name)    
print(id(lisi.name))            
lisi = Person()
lisi.name = "xiaolong"

print(id(zhangsan))
#(输出)2070146453856
print(lisi.name)
#(输出)xiaolong
print(id(lisi.name))
#(输出)2070146521264
可以看出兩個實例化的物件的id是不同的

這裡就引出了命名空間規則:
每實例化出來一個對象,如果沒進行特別的處理的話都會佔用系統單獨的記憶體儲存。

class Person:
    pass

zhangsan = Person()                    
zhangsan.name = "zhangsan"
zhangsan.sex = "男"
zhangsan.age = 19
zhangsan.hight = 175

lisi = Person()
lisi .name = "xiaolong"
lisi .sex = "女"
lisi .age = 29
lisi .hight = 170
#两个内容的创建方式相同啊,只是内容不同,那么我们写一个函数来进行这种重复性的操作,
class Person:
    def __init__(self, name, sex, age, hight):
        self.name = name        zhangsan.name = name
        self.sex = sex            zhangsan.name = sex
        self.age = age            zhangsan.name = age
        self.hight = hight        zhangsan.name = hight
#self 是为了规范明确是谁调用了,所以相当于将zhangsan这个对象传给了self。
#而后面self之后的name, sex, age, hight 就是所要传入的"zhangsan" "男"19 175 信息
#zhangsan = Person()                
#zhangsan.name = "zhangsan"
#zhangsan.sex = "男"
#zhangsan.age = 19
#zhangsan.hight = 175

这样我们就不用再像上面一样传入了
zhangsan = Person("zhangsan","男","19",175)
print(zhangsan.name)
#(输出)zhangsan

init:是系統所存在的特殊函數,當我們實例化物件的時候(zhangsan = Person(“zhangsan”,“男”,“19”,175)) ,預設實例化物件進行呼叫這個函數。 def init(self, name, sex, age, hight):
self物件名為 等號前面的zhangsan,
而name, sex, age, hight 對應"zhangsan",「男”,“19”,175

以上是Python3中類別Class和物件object的理解(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除