面向對象3(方法)

 

 

'''

方法:
    1. 對象(普通)方法: 方法之間的相互調用,self.方法()
    2. 類方法: 是屬於類的(沒有對象也可以調用)
        類屬性: 屬性是屬於類本身

       類方法的定義:
        @classmethod
        def xxx(cls): -------> cls ~ class
            xxxx

      特徵:
      1. 定義方式使用了:   @classmethod裝飾器
      2. 類方法是不依賴對象的,沒有對象也可以通過: 類名.方法名
      3. 類方法中只能訪問類的屬性或者方法,但是不能調用對象
      4. 在對象方法中可以調用類的方法: 類名.方法名()

    3. 靜態方法
        定義方式:
            @staticmethod
            def 方法名():
                pass

       特徵:
       1. 定義方式不同,使用@staticmethod裝飾器
       2. 他不是必須要有類似self,cls的參數
       3. 類似類方法,只不過在方法體中需要通過:類名.屬性名 或者 類名.方法()
       4. 對象方法中可否調用靜態方法? 能夠調用靜態方法
'''


class Cat:
    def __init__(self, nickname, age, color):
        self.nickname = nickname
        self.age = age
        self.color = color

    def eat(self, food):
        # 類中方法的調用
        # self.show()
        print('{}正在吃{}'.format(self.nickname, food))

    def catchMouse(self):
        print('{}抓住了一隻大老鼠....'.format(self.nickname))
        self.eat('老鼠')

    def show(self):
        print('暱稱:{},年齡:{},顏色:{}'.format(self.nickname, self.age, self.color))

    @classmethod
    def mytest(cls):
        print('我是一個類方法')


cat1 = Cat('花花', 2, '灰色')

# 方法的調用
cat1.show()
cat1.catchMouse()

cat2 = Cat('胖墩', 2, '橘色')

# cat2.show()
cat2.eat('大老鼠')

print('-------------------類方法-----------------------')


class Dog:
    name = '小狗'

    @classmethod
    def seeHouse(cls):  # cls = Dog
        print('我是乖乖看門的小狗狗。。。。')
        print(cls.name)
        # cls.eat()

    def eat(self):
        print('小狗狗喜歡吃狗糧...')
        # 可以調用類方法,如何調用類方法?
        Dog.seeHouse()
        # self.sleep()

    def sleep(self):
        print('小狗狗就喜歡睡大覺...')


# 調用seeHouse
print(Dog.name)
Dog.seeHouse()  # Dog.seeHouse(Dog)

dog1 = Dog()
dog1.eat()

print('--------------------靜態方法------------------------')


class Mouse:
    name = '老鼠'

    def eat(self):
        print('小老鼠經常偷吃東西...')
        Mouse.run()

    @staticmethod
    def run():
        print('小老鼠跑的很快,。。。。')
        # print(Mouse.name)
        # Mouse.sleep()

    @classmethod
    def sleep(cls):
        print('小老鼠也很能睡的.....')
        print(cls.name)


# 類名.run()
Mouse.run()

m1 = Mouse()
m1.eat()

# 定義手機類,有屬性:品牌,型號,價格,顏色,可以打電話、玩遊戲,顯示手機信息。創建對象實現屬性賦值和調用方法

# 定義一個工具類Util,其中有屬性version表示版本,
# 定義類方法:conn_db(dbname)表示要連接的數據庫,裏面打印“正在連接{}數據庫...." time.sleep(1), “連接數據庫成功”
# 定義靜態方法: select_data()表示要查詢數據,需要先連接數據庫再打印查詢的數據是:xxx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章