面向对象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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值