静态⽅法和类⽅法

转载于:https://blog.csdn.net/qq_41020281/article/details/79634707

1. 类⽅法

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

class People(object):
country = 'china'
#类⽅法,⽤classmethod来进⾏修饰
@classmethod
def getCountry(cls):
return cls.country
p = People()
print p.getCountry() #可以⽤过实例对象引⽤
print People.getCountry() #可以通过类对象引⽤

类⽅法还有⼀个⽤途就是可以对类属性进⾏修改:

class People(object):
country = 'china'
#类⽅法,⽤classmethod来进⾏修饰
@classmethod
def getCountry(cls):
return cls.country
@classmethod
def setCountry(cls,country): cls.country = country
p = People()
print p.getCountry() #可以⽤过实例对象引⽤
print People.getCountry() #可以通过类对象引⽤
p.setCountry('japan')
print p.getCountry()
print People.getCountry()

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

2. 静态⽅法

需要通过修饰器 @staticmethod 来进⾏修饰,静态⽅法不需要多定义参数

class People(object):
country = 'china'
@staticmethod
#静态⽅法
def getCountry():
return People.country
print People.getCountry()

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

最新文章

  1. .NET - 基于事件的异步模型
  2. HAOI2015 泛做
  3. BZOJ2597 [Wc2007]剪刀石头布(最小费用最大流)
  4. iOS学习之手势
  5. [python] 线程
  6. SpringMVC——对Ajax的处理(包含 JSON 类型)
  7. js贪吃蛇
  8. hdu 1695 GCD 莫比乌斯反演入门
  9. nginx错误日志级别
  10. PopupWindow 的showatlocation参数解释
  11. Xcode4 布置Git环境Your working copy is out of date. Try pulling from the remote to get the latest change
  12. 【入门】安装Elasticsearch5.0 部署Head插件
  13. [APP]如果你想反编译
  14. Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder
  15. 扩展jquery.validate自定义验证,自定义提示,本地化
  16. Java中的回调
  17. Python爬虫之正则表达式(3)
  18. ASP.NET Core使用HttpClient的同步和异步请求
  19. 3.让linux 增加 wget 命令
  20. Spring PropertyEditor Spring conversion框架分析

热门文章

  1. CMDB资产管理系统开发【day26】:实现资产自动更新
  2. ubuntu14.04 网络配置
  3. LFYZ-OJ ID: 1026 数的计数(数的计算)NOIP2001
  4. ArcGis安装失败提示“需要Microsoft .NET Framework 3.5 sp1或等效环境”的解决方法
  5. HTML(三)HTML属性
  6. [物理学与PDEs]第5章习题4 广义 Hookean 定律的张量的对称性
  7. jQuery提示组件toastr(取代alert)
  8. luogu P5287 [HNOI2019]JOJO
  9. javascript基础 之 void
  10. lucene学习的小结