面向对象高级用法

静态方法

通过 @staticmethod 装饰器可把其装饰的方法变为一个静态方法

普通的方法: 可以在实例化后直接调用,并且在方法里可以通过 self. 调用实例变量或类变量
**静态方法:**是不可以访问实例变量或类变量的
因此,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法

class Dog(object):

    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(self):
        print("%s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat()

执行程序会报错
在这里插入图片描述
想让上面的代码可以正常工作有两种办法

  • 调用时主动传递实例本身给eat方法,即d.eat(d)
  • 在eat方法中去掉self参数,但这也意味着,在eat中不能通过self.调用实例中的其它变量了

方法1

class Dog(object):

    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(self):
        print("%s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat(d)

在这里插入图片描述

方法 2

class Dog(object):

    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat():
        print(" is eating")


d = Dog("ChenRonghua")
d.eat()

在这里插入图片描述

类方法

类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

class Dog(object):
    def __init__(self, name):
        self.name = name

    @classmethod
    def eat(self):
        print("%s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat()

错误,说 Dog 没有 name 属性,因为 name 是个实例变量,类方法是不能访问实例变量的

在这里插入图片描述

class Dog(object):
    name = "我是类变量"

    def __init__(self, name):
        self.name = name

    @classmethod
    def eat(self):
        print("%s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat()

在这里插入图片描述

属性方法

属性方法的作用就是通过@property把一个方法变成一个静态属性

class Dog(object):

    def __init__(self, name):
        self.name = name

    @property
    def eat(self):
        print(" %s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat()

在这里插入图片描述

调用会出以下错误, 说NoneType is not callable, 因为eat此时已经变成一个静态属性了, 不是方法了, 想调用已经不需要加()号了,直接d.eat就可以了

class Dog(object):

    def __init__(self, name):
        self.name = name

    @property
    def eat(self):
        print(" %s is eating" % self.name)


d = Dog("ChenRonghua")
d.eat

在这里插入图片描述
关于 静态方法、类方法、属性方法,今后还需多查多用.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值