Python你必须了解的一些点——静态方法&类方法

首先和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法实例方法静态方法
和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。

静态方法

静态方法使用指南
  1. 格式:在方法上面添加 @staticmethod
  2. 参数:静态方法可以有参数也可以无参数
  3. 应用场景:一般用于和类对象以及实例对象无关的代码。
  4. 使用方式: 类名.类方法名(或者对象名.类方法名)。

如果我们的类属性是一个私有变量,我们就需要定义一个函数使得在类外可以访问它。我们希望既可以用类名来访问,也可以用实例名来访问,那么该如何做呢?

class Robot: 
    # __开头表示私有变量
    __counter = 0
    
    def __init__(self): 
        type(self).__counter += 1
        
    def Show(self):
        return Robot.__counter
    
if __name__ == "__main__":
    x = Robot()
    print("通过实例访问: ", x.Show())
    
    print("通过类访问: ", Robot.Show())	# 这样访问会报错

如果我们在定义Show这个函数的时候,不写self参数,那么可以通过类访问,不能通过实例访问,静态方法就是为了解决这个问题。只需要在定义的函数前添加@staticmethod,这是装饰器语法。
来看看下面的代码,完美解决上面的问题:

class Robot: 
    # __开头表示私有变量
    __counter = 0
    
    def __init__(self): 
        type(self).__counter += 1
   
    @staticmethod    
    def RobotInstances():
        return Robot.__counter
    
if __name__ == "__main__":
    x = Robot()
    # 下面可以访问
    print("通过实例访问: ", x.RobotInstances())
    # 下面可以访问
    print("通过类访问: ", Robot.RobotInstances())

类方法

类方法使用指南

无需实例化,可以通过类直接调用的方法,但是方法的第一个参数接收的一定是类本身

  1. 在方法上面添加@classmethod
  2. 方法的参数为 cls 也可以是其他名称,但是一般默认为cls
  3. cls 指向 类对象
  4. 应用场景:使用场景:一个实例的私有属性通过“__属性名”来定义,无法被外部所访问。但是可以从类的内部进行间接访问,即通过实例方法来访问。
  5. 使用 可以是 对象名.类方法名。或者是 类名.类方法名

使用类方法不需要定义一个实例,类方法中的cls指向类,不像实例方法中的self指向一个实例。定义类方法,需要在函数前添加@classmethod装饰器。
类方法在继承当中很有用,在下面的例子中,我们希望在不定义实例的情况下,可以查看_class_info信息,此时静态方法无法起到作用,因为它没有传入任何参数,无法识别是哪一个类。

class Person:
  	type = '人类'
 
  	@classmethod
  	def test(cls):
  		print(cls.type)

class Pet:
    _class_info = "pet animals"

    @classmethod
    def about(cls):
        print("This class is about " + cls._class_info + "!")   
        
class Dog(Pet):
    _class_info = "man's best friends"

class Cat(Pet):
    _class_info = "all kinds of cats"

if __name__ == "__main__":
	Pet.about()
	Dog.about()
	Cat.about()
	Person.test()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值