类方法与静态方法【学习笔记】

本文介绍了Python中类方法和静态方法的概念、定义、调用方式及注意事项。类方法属于类对象,通过`classmethod`装饰,而静态方法与类对象无关,用`staticmethod`装饰。实例展示了如何在类中定义并调用这两种方法,以及它们在访问实例属性和方法上的限制。
摘要由CSDN通过智能技术生成

一、类方法

类方法是从属于类对象那个的方法。类方法通过装饰器@classmethod来定义,格式如下

@classmethod

def 类方法名(cls,【形参列表】):

        函数体

要点如下:

1.@classmethod必须位于方法的上面一行。

2.第一个cls必须有,cls指的是“类对象本身”(参考self)。

3.调用类方法的格式:“类名.类方法名(参数列表)”。参数列表中,不需要也不能给cls传值。

4.类方法中访问实例属性和实例方法会导致错误。

5.子类继承父类方法时,传入cls是子类对象,而非父类对象。

二、静态方法

Python中允许定义与“类对象”无关的方法,称为“静态方法”。

"静态方法"和在模块中定义的普通方法没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”。

静态方法通过装饰器@staticmethod来定义,格式如下:

        @staticmethod

        def 静态方法名(【形参列表】):

                函数体

要点如下:

1.@staticmethod必须位于方法的上面一行

2.调用静态方法格式:“类名.静态方法名(【参数列表】)”。

3.静态方法中访问实例属性和实例方法会导致错误。

#测试类方法
class student:
    company="sxt"        #类属性


    def __int__(self,name,score):
        self.name=name
        self.score=score

    @classmethod         #类方法
    def printcompany(cls):
        print(cls.company)
        #print(self.name)  会报错,无法使用实例变量和实例方法

student.printcompany()

#测试静态方法
class student2:
    company="sxt"        #类属性
    @staticmethod
    def printage(n):
        print("年龄是{0}".format(n))

student2.printage(19)

结果

再举一例:

class Geese:
   '''雁类'''

   neck = "脖子较长"                     # 定义类属性(脖子)
   wing = "振翅频率高"                   # 定义类属性(翅膀)
   leg = "腿位于身体的中心支点"  # 定义类属性(腿)

   def __init__(self):                 # 实例方法(相当于构造方法) 后面会专门说这个
       print("我属于雁类!我有以下特征:")
       print(Geese.neck)                   # 输出脖子的特征(也阔以通过self.属性名  访问)
       print(Geese.wing)                   # 输出翅膀的特征
       print(Geese.leg)                    # 输出腿的特征

s=Geese()

class Geese1:
   '''雁类'''
   count = 0                         #类属性(下面用到此变量就必须在此定义)

   def __init__(self):      # 实例方法(相当于构造方法)

       neck = "脖子较长"                    # 定义实例属性(脖子)
       wing = "振翅频率高"                  # 定义实例属性(翅膀)
       leg = "腿位于身体的中心支点,行走自如"  # 定义实例属性(腿)
       print("我属于雁类!我有以下特征:")
       print(neck)                # 输出脖子的特征
       print(wing)                   # 输出翅膀的特征
       print(leg)                    # 输出腿的特征
       Geese1.count=Geese1.count+1
   def shout(self):
       print("66666666666666666")

s1=Geese1()
print()
s2=Geese1()
print()
s3=Geese1()
print()
print("一共调用了{0}次实例方法".format(Geese1.count))
s1.shout()

结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值