解析python 类方法、对象方法、静态方法
python中实现静态方法和类方法都是依赖于python的修饰器来实现的。对象方法有self参数,类方法有cls参数,静态方法是不需要这些附加参数的。
1、我们已经讨论了类/对象可以拥有像函数一样的方法,这些对象方法与函数的区别只是一个额外的self变量
#-*-coding:utf-8-*- #!/usr/bin/python #Filename:method.py classPerson: grade=1 def__init__(self,name): self.name=name defsayHi(self):#加self区别于普通函数 print'Hello,yournameis?',self.name @staticmethod#声明静态,去掉则编译报错;还有静态方法不能访问类变量和实例变量 defsayName():#使用了静态方法,则不能再使用self print"mynameisking"#,grade,#self.name @classmethod#类方法 defclassMethod(cls): print("classmethod") p=Person("king") p.sayHi() p.sayName() p.classMethod() Person.classMethod()
输出:
Hello,yournameis?king
mynameisking
classmethod
classmethod
2、静态方法
要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。
静态方法是一类特殊的方法,有时可能需要写一个属于这个类的方法,但是这些代码完全不会使用到实例对象本身,例如:
classStudent(object): @staticmethod defaver_age(x,y): returnx+y defyear(self): returnself.aver_age(self.month,self.day)
这个例子中,如果把aver_age作为非静态方法同样可以运行,但是它要提供self参数,而这个参数在方法中根本不会被使用到。这里的@staticmethod装饰器可以给我们带来一些好处,Python不再需要为Student对象实例初始化一个绑定方法,绑定方法同样是对象,但是创建需要成本,而静态方法可以避免这些。
Student().yearisStudent().year Student().aver_ageisStudent().aver_age Student().aver_ageisStudent.aver_age False True True
可读性更好的代码,看到@staticmethod我们就知道这个方法并不需要依赖对象本身的状态。
可以在子类中被覆盖,如果是把aver_age作为模块的顶层函数,那么继承自Student的子类就没法改变Student的aver_age了如果不覆盖year的话。
3、类方法
类方法与普通的成员函数和静态函数有不同之处,在接触的语言中好像也没见过这种语义,看它的定义:
一个类方法就可以通过类或它的实例来调用的方法,不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。
记住:方法的第一个参数都是类对象而不是实例对象.
按照惯例,类方法的第一个形参被命名为cls.任何时候定义类方法都不是必须的(类方法能实现的功能都可以通过定义一个普通函数来实现,只要这个函数接受一个类对象做为参数就可以了).
classDog(object): food="gutou" age="1" def__init__(self,name): self.NAME=name @classmethod defeat(self,age):#只能是类中的变量 #print(self.NAME) print(age) print(self.food) @classmethod defeat1(self,age):#只能是类中的变量 #print(self.NAME) age="2" self.food="tang" @staticmethod defprint_1(): print(Dog.food,Dog.age) d=Dog("labuladuo") d.eat(Dog.age)#通过对象调用 Dog.eat(Dog.age)#通过类调用 print("-----1-----") d.eat1(Dog.age) Dog.print_1() print("--------2-------") Dog.eat1(Dog.age) Dog.print_1()
输出:
1
gutou
1
gutou
-----1-----
('tang','1')
--------2-------
('tang','1')
以上就是解析python类方法、对象方法、静态方法的详细内容,更多关于python类方法、对象方法、静态方法的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。