1. 程式人生 > >8 面向物件基礎(一)

8 面向物件基礎(一)

8.1面向物件程式設計介紹

  • 面向物件(object-oriented ;簡稱: OO)
  • 面向物件程式設計(Object Oriented Programming-OOP)
  • 面向過程

8.2 類和物件

8.3 定義類

8.4 建立物件

class Dog(object):    # 定義一個Dog類

    def eat(self):    # 定義一個eat方法
        print("---吃---")

    def drink(self):   # 定義一個drink方法
        print("---喝---")

wang_cai = Dog()   # 建立一個物件,建立一個例項

wang_cai.eat()
wang_cai.drink()
# wang_cai.say()
xiao_tian = Dog()
xiao_tian.eat()
xiao_tian.drink()

8.5 新增和獲取物件的屬性

class Dog(object):

    def eat(self):
        print("---吃---")

    def drink(self):
        print("---喝---")

wang_cai = Dog()
wang_cai.name = "旺財"    # 給wang_cai這個物件新增一個name屬性
wang_cai.age = 10
print(wang_cai.name)
print(wang_cai.age)
# wang_cai.eat()

xiao_tian = Dog()
xiao_tian.name = "哮天"
xiao_tian.age = 12
print(xiao_tian.name)

8.6 self

"""
給物件新增屬性:
wang_cai.name = "旺財" 
物件名.屬性名 = 值

獲取物件的屬性:
物件名.屬性名



wang_cai.say()  # 在呼叫這個say方法的時候,python直譯器幫我們傳遞了前面這個物件作為實參被self接收了,所以誰在呼叫,self就是誰
"""


class Dog(object):

    def eat(self):
        print("---吃---")

    def drink(self):
        print("---喝---")

    def say(self):
        print("我的名字叫%s" % self.name)

wang_cai = Dog()
wang_cai.name = "旺財"    # 給wang_cai這個物件新增一個name屬性

wang_cai.say()  # 在呼叫這個say方法的時候,python直譯器幫我們傳遞了前面這個物件作為實參被self接收了,所以誰在呼叫,self就是誰



xiao_tian = Dog()
xiao_tian.name = "哮天"
xiao_tian.say()

8.7 init()方法

"""
wang_cai = Dog("旺財", 10) 

到底做了哪些事情:
1、建立一個物件
2、建立物件成功之後,自動呼叫__init__()方法
3、讓wang_cai去指向這個創建出來的物件
"""


class Dog(object):

    def __init__(self, aaa, bbb):
        """
            初始化方法
            在建立物件之後,把一些屬性先設定好
        """
        self.name = aaa
        self.age = bbb

    def eat(self):
        print("---吃---")

    def drink(self):
        print("---喝---")


wang_cai = Dog("旺財", 10)    # 建立物件(例項)
# wang_cai.name = "旺財"
# print(wang_cai.name)
# print(wang_cai.age)
#
#
# xiao_tian = Dog("哮天", 12)
# print(xiao_tian.name)
# print(xiao_tian.age)

8.8__str__()方法

"""
wang_cai = Dog("旺財", 10) 

到底做了哪些事情:
1、建立一個物件
2、建立物件成功之後,自動呼叫__init__()方法
3、讓wang_cai去指向這個創建出來的物件
"""


class Dog(object):

    def __init__(self, aaa, bbb):
        """
            初始化方法
            在建立物件之後,把一些屬性先設定好
        """
        self.name = aaa
        self.age = bbb

    def __str__(self):
        """
            美化直接列印物件名的結果(直接列印物件名得到的是一個地址)
            1、這個方法裡面一定要有return
            2、return 返回值一定是字串
            
            直接列印列印物件名的時候就不再是地址了,而是return後面的這個字串
            所以直接列印物件名的時候,就會來執行這裡的程式碼
        """
        return "我叫%s,今年%s歲了" % (self.name, self.age)

    def eat(self):
        print("---吃---")

    def drink(self):
        print("---喝---")


wang_cai = Dog("旺財", 10)    # 建立物件(例項)
print(wang_cai)

8.9 del()方法

  • 建立物件後,python直譯器預設呼叫__init__()方法;

  • 當刪除物件時,python直譯器也會預設呼叫一個方法,這個方法為__del__()方法

  • 當有變數儲存了一個物件的引用時,此物件的引用計數就會加1;

  • 當使用del() 刪除變數指向的物件時,則會減少物件的引用計數。如果物件的引用計數不為1,那麼會讓這個物件的引用計數減1,當物件的引用計數為0的時候,則物件才會被真正刪除(記憶體被回收)。

8.10 應用:烤地瓜

"""
烤地瓜:
示例屬性如下:
cookedLevel : 這是數字;0~3表示還是生的,超過3表示半生不熟,超過5表示已經烤好了,超過8表示已經烤成木炭了!我們的地瓜開始時時生的
cookedString : 這是字串;描述地瓜的生熟程度
condiments : 這是地瓜的配料列表,比如番茄醬、芥末醬等
示例方法如下:
cook() : 把地瓜烤一段時間
addCondiments() : 給地瓜新增配料
__init__() : 設定預設的屬性
__str__() : 讓print的結果看起來更好一些
"""


class Yam(object):

    def __init__(self):
        # 定義一個屬性,來描述生熟程度
        self.string = "生的"
        # 定義一個屬性,記錄地瓜被烤的總時長
        self.all_time = 0
        # 定義一個列表,來存放這些配料
        self.condiments = []

    def __str__(self):
        return "這個地瓜%s, 已經新增的配料有:%s" % (self.string, self.condiments)

    def cooked(self, time):
        self.all_time = self.all_time + time

        if 0 <= self.all_time <= 3:
            # 還是生的
            self.string = "生的"
        elif 3 < self.all_time <= 5:
            # 半生不熟
            self.string = "半生不熟"
        elif 5 < self.all_time <= 8:
            # 已經烤好了
            self.string = "烤好了"
        else:
            # 烤成木炭了
            self.string = "烤成木炭"

    def add_sth(self, name):
        self.condiments.append(name)

yam = Yam()
print(yam)
yam.cooked(4)
print(yam)
yam.cooked(2)
print(yam)
#
yam.add_sth("辣椒醬")
yam.add_sth("孜然")
yam.add_sth("番茄")
print(yam)