【每天1分钟】PYTHON基础之面向对象(类方法、静态方法)

【每天1分钟】PYTHON基础之面向对象(类方法、静态方法)

1. 静态方法

静态方法是类中的函数,不需要实例。
静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数。


class People:
    defaultName = 'DefaultName'

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

    def eat(self, food):
        print('%s is eating %s' % (self.name, food))

    @staticmethod      # 使用 @staticmethod 作为装饰器的方法就是静态方法
    def play(obj):     #  参数不用 self ;
        print('%s is playing %s' % (People.defaultName,obj)) # 不能引用或访问实例属性;可以通过类.类变量访问类属性


man1 = People('Tom')
man1.eat('apple')
man1.play('football')  # 用实例调用

People.play('basketball')  # 用类调用

返回:

Tom is eating apple
DefaultName is playing football
DefaultName is playing basketball

本质:

  1. 在类中的一个普通函数而已
  2. 使面向对象程序中函数归属于类,易于代码管理

2. 类方法

类方法是将类本身作为对象进行操作的方法。
他和静态方法的区别在于:不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来。

class Test:

    @classmethod
    def class_method(cls):
        print('This is {0}'.format(cls))


class SubTest(Test):

    @classmethod               # 使用 @classmethod 作为装饰器的方法就是类方法
    def subclass_method(cls):  # 必须提供参数cls; 不能引用或访问实例属性
        print('This is {0}'.format(cls))


if __name__ == '__main__':
    a = Test()
    a.class_method()     # 可以用类、类实例调用
    Test.class_method()  # 可以用类、类实例调用

    print('+======================================================+')

    b = SubTest()
    b.subclass_method()
    b.class_method()            # 继承时,传入的类变量cls是子类,而非父类
    SubTest.subclass_method()
    SubTest.class_method()      # 继承时,传入的类变量cls是子类,而非父类

This is <class ‘main.Test’>
This is <class ‘main.Test’>
+======================================================+
This is <class ‘main.SubTest’>
This is <class ‘main.SubTest’>
This is <class ‘main.SubTest’>
This is <class ‘main.SubTest’>

用途:

1.与类相关,但不依赖或改变类的实例
2.工厂方法,创建类实例,完成有关预处理
3.在类内调用静态方法时不用硬编码类名

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值