'''
方法:
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