'''
方法:
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
面向对象3(方法)
猜你喜欢
转载自blog.csdn.net/piduocheng0577/article/details/105070400
今日推荐
周排行