(更新时间)2021年3月25日 python基础知识(静态方法和类方法)
发布日期:2021-06-29 15:14:46 浏览次数:3 分类:技术文章

本文共 2198 字,大约阅读时间需要 7 分钟。

1. 类方法

是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以’cls’作为第一个参数的名字,就最好用’cls’了),能够通过实例对象和类对象去访问。

"""实例方法: 类中默认定义的方法,就是实例方法, 第一个参数为self,表示实例对象类方法: 使用 @classmethod 装饰的方法,称为类方法, 第一个参数是cls,代表的是类对象自己什么情况定义为实例方法,什么情况定义为类方法?1. 如果在方法中使用了实例属性, 那么该方法必须定义为实例方法2. 前提:不需要使用实例属性. 需要使用类属性,可以将这个方法定义为类方法"""class Dog(object):    class_name = '狗类'    def __init__(self, name, age):        self.name = name        self.age = age    def play(self):  # 实例方法        print(f"小狗{self.name} 在快乐的玩耍....")    # def get_class_name(self):  # 是实例方法, 因为没有使用实例属性,所以可以定义为类方法    #     return Dog.class_name    @classmethod    def get_class_name(cls):  # cls 是类方法的默认形参,在调用的时候,不需要手动传递,python解释器会自动传递        return cls.class_namedog = Dog('大黄', 2)dog.play()print(dog.get_class_name())   # 对象.类方法()# 类名.类方法()print(Dog.get_class_name())

类方法还有一个用途就是可以对类属性进行修改:

class People(object):    country = 'china'    #类方法,用classmethod来进行修饰    @classmethod    def get_country(cls):        return cls.country    @classmethod    def set_country(cls,country):        cls.country = countryp = People()print(p.get_country())   #可以用过实例对象访问print(People.get_country())    #可以通过类访问p.set_country('japan')   print(p.get_country())print(People.get_country())

结果显示在用类方法对类属性修改之后,通过类对象和实例对象访问都发生了改变

2. 静态方法

需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数,可以通过对象和类来访问。

"""实例方法: 类中默认定义的方法,就是实例方法, 第一个参数为self,表示实例对象类方法: 使用 @classmethod 装饰的方法,称为类方法, 第一个参数是cls,代表的是类对象自己静态方法: 使用 @staticmethod 装饰的方法,称为静态方法, 对参数没有特殊要求,可以有,可以没有什么情况定义为实例方法,什么情况定义为类方法, 什么情况下静态方法?1. 如果在方法中使用了实例属性, 那么该方法必须定义为实例方法2. 前提:不需要使用实例属性. 需要使用类属性,可以将这个方法定义为类方法3. 前提:不需要使用实例属性,同时也不需要使用类属性, 此时可以将这个方法定义为静态方法"""class Dog(object):    class_name = '狗类'    def __init__(self, name, age):        self.name = name        self.age = age    def play(self):  # 实例方法        print(f"小狗{self.name} 在快乐的玩耍....")    @staticmethod  # 定义静态方法    def show_info():        print('这是一个Dog类')dog = Dog('大黄', 2)dog.play()# 对象.方法名()dog.show_info()# 类名.方法名()Dog.show_info()

总结

  • 从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
  • 实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
  • 静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用

转载地址:https://codeboy.blog.csdn.net/article/details/115215037 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(更新时间)2021年3月25日 python基础知识(异常的捕获)
下一篇:(更新时间)2021年3月25日 python基础知识(类属性和实例属性)

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年05月01日 14时54分14秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章