python之面向對象初識

1、面向對象初識
一、結構上 面向對象分紅兩部分:屬性、方法框架

class A:
    name = 'xiaoming'   #  靜態屬性、靜態變量、靜態字段。

    def func1(self):    # 函數、動態屬性、方法。
        pass

 

 

二、函數與面向對象:
  1,函數封裝一個功能,而面向對象封裝多個相關的功能。
  2,面向對象比較抽象,它是一種思想,站在上帝的角度去理解它。
  3,面向對象程序可擴展,對象都是一個個獨立的。耦合性,差別性。函數

 

複製代碼
函數:
def register(argv):
    pass

def login(argv):
    pass

def shoppingcar(self):
        pass

        
面向對象:
class Shopping:
    def __init__(self):  # 特殊方法
        pass

    def register(self):
        pass

    def login(self):
        pass
        
    def shoppingcar(self):
        pass
複製代碼

 

三、類與對象:
類:具備相同屬性或者功能的一類實物。
對象:對象是類的具體體現。post

 


2、類名、對象的使用
一、類能夠理解爲:一個公共框架,一個公共模型學習

複製代碼
class person:
    animal = '高級動物'
    walk_way = '直立行走'
    language = '語言'

    def eat(self):
        print('當心吃屎你')

    def play(self):
        print('每天就知道玩')
複製代碼

 

 

二、類名的使用
1,查看類中的全部屬性及方法 __dict__
print(person.__dict__)         # 查看類中的全部屬性及方法this

print(person.__dict__['animal'])    # 經過__dict__方式能夠查看單獨的屬性及方法,可是不能進行增刪改spa

person.__dict__['animal'] = '低級動物'   # 改:報錯指針

person.__dict__['name'] = 'xiaoming'    # 增:報錯code

del person.__dict__['animal']     # 刪:報錯對象

工做中,學習中通常用到 __dict__只是用來查看類中的全部屬性及方法,不進行其餘操做。blog

 

2,查看(增刪改)類中某個屬性用萬能的點 .

複製代碼
print(person.animal)  #
print(person.language)

person.name = 'xiaoming'  #
print(person.name)

person.language = '中文' #
print(person.language)

del person.walk_way  #
print(person.__dict__)
複製代碼


3,操做方法,用類名能夠執行方法,可是通常不經過類名操做!!!
person.__dict__['eat'](111)      # 不建議經過__dict__執行方法
person.play(666)


三、對象的使用

複製代碼
class person:

    animal = '高級動物'
    walk_way = '直立行走'
    language = '語言'

    def __init__(self,name,age,eye):  # 功能:給對象封裝屬性的。
        self.name1 = name
        self.age1 = age
        self.eye1 = eye
    
    def eat(self):
        print('當心吃屎你')

    def play(self):
        print('每天就知道玩')

        

obj = person('xiaobai',1000,'小眼睛')  # 這個過程是一個實例化過程,他會實例化一個對象(會在內存實例化一個對象空間)。
print(obj)  #obj是對象空間的地址
print(obj.name1)  # 經過對象查看屬性
複製代碼

實例化過程內部進行了三個階段:
  1,首先遇到 類名() 就會在內存中開闢一個對象空間,只有一個類對象指針(用一個變量接收這個對象空間地址)
  2,而後自動執行類中的__init__方法,而且將對象空間地址自動傳給self參數,其餘參數手動傳入。
  3,最後執行__init__方法 給對象空間封裝相應的屬性。

 

對象操做對象空間:

1,對象查看對象空間全部的屬性也可用 __dict__
print(obj.__dict__)       # 返回一個包含對象空間全部屬性的字典

2,對象操做對象的某個屬性(增刪改查)用萬能的點.
obj.sex = '男'   # 增
print(obj.sex)

del obj.eye1    # 刪
print(obj.__dict__)

obj.age1 = 18   # 改
print(obj.age1)

print(obj.name1)     #查
print(obj.__dict__)  #查

 

3,對象操做類空間的屬性:只能查
print(obj.animal) #查

obj.animal = '低級動物'       # 想要這樣改類的屬性,是改不了的,它會爲對象生成一個animal的屬性並不會改變類的                                                 animal
print(obj.animal)          # 低級動物
print(person.animal)   # 高級動物

del obj.language       # 刪:報錯


4,對象操做類空間的方法:對象.方法()
obj.eat()

 

3、類名稱空間,對象名稱空間

複製代碼
公用模板,公共框架
class GameRole:

    rule = '遊戲規則'

    def __init__(self,area,nickname,hp,ad):
        self.area = area
        self.nickname = nickname
        self.hp = hp
        self.ad = ad

    def attack(self):
        print('攻擊誰')


gailun = GameRole('德瑪西亞','草叢倫',1000,75)  #實例化對象gailun
yasuo = GameRole('艾歐尼亞','託兒所',500,89)   #實例化對象yasuo
複製代碼

一張圖片解釋:

 


1,對象能調用類中的屬性與方法,可是不能修改類的屬性和方法
實例化一個對象的時候,會創建對象指向類的指針,gailun.屬性名,先從本身空間去找,
沒有此屬性它會經過類對象指針從類去找,類中找不到,會從父類去找。

 

複製代碼
gailun.attack = 666  # 這裏並非調用類的attack方法,而是給對象增長一個屬性 attack = 666
print(gailun.attack)  # 666

gailun.rule = gailun.rule  # 至關於gailun.rule = '遊戲規則'  對象.屬性名='遊戲規則'
print(gailun.rule)

gailun.nikename = '蓋倫'  #修改對象的屬性
print(gailun.nickname)
複製代碼

 

 

2,類能不能調用對象的屬性? 不能,由於類沒有指向對象的指針
print(GameRole.area)   # 報錯


3,對象與對象之間可不可互相調用?
同一個類實例化出來的對象之間是不能互相訪問的。
不一樣類實例化的對象有可能互相訪問。


4,給對象封裝屬性:__init__ 任意位置。

相關文章
相關標籤/搜索