静态方法和类方法

1. 类方法

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

class people:country = 'china'#类方法,用classmethod来进行修饰@classmethoddef getCountry(cls):return cls.countryp = people()
print p.getCountry()    #可以用过实例对象引用
print people.getCountry()    #可以通过类对象引用

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

class people:country = 'china'#类方法,用classmethod来进行修饰@classmethoddef getCountry(cls):return cls.country@classmethoddef setCountry(cls,country):cls.country = countryp = people()
print p.getCountry()    #可以用过实例对象引用
print people.getCountry()    #可以通过类对象引用p.setCountry('japan')   print p.getCountry()   
print people.getCountry()

 运行结果:

china
china
japan
japan

2. 静态方法

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

class people:country = 'china'@staticmethod#静态方法def getCountry():return people.countryprint people.getCountry()

 

总结

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


转载于:https://www.cnblogs.com/loaderman/p/6561878.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言角谷定理递归,【C++】(递归+非递归)卖鸭子及角谷定理+递归模型+递归树...

ps:全文中如果有任何错误您看到并能指出来的话(尤其是递归树)感激不尽XDDDD每个问题包含:(1)题目描述(2)递归解决代码(3)非递归解决代码(4)递归模型(5)递归树(6)运行结果截图一、卖鸭子问题1.题目描述一个人赶着鸭子去每个村庄卖,每经过一个村…

前端学习(2325):angular之添加新组件

app.component.html <div style"text-align:center"><h1>welcome to {{title}}</h1><div style"color:#f00000">我是歌谣</div><div>{{name}}</div> </div>app.component.ts import { Component } from…

【批处理】shift用法举例

1 echo off 2 set sum03 call :sub sum 1 2 3 44 echo sum%sum%5 pause6 7 :sub8 set /a %1%1%29 shift /2 10 if not "%2""" goto sub 11 goto :eof View Code转载于:https://www.cnblogs.com/xiongjiawei/p/6564958.html

C语言给出任意4个数算24点,讨论24点算法。

讨论24点算法。24点是扑克牌游戏 玩法是&#xff1a;从一副扑克的A到10里随意抽出4张牌用‘加’’减‘‘乘’‘除’四个符号算出4个数是否等于24&#xff0c;是的话成功&#xff0c;否的话失败&#xff1b;我用的是穷举法&#xff01;(源码有点长)就是穷举出所有可能的算术式&a…

前端学习(2326):angular之用户输入数据

test1.component.html <p class"p1">test1 works!</p> <div (click)"clickDemo()" >我是div1的内容</div> <input (keyup)"onkey($event)" type"text">test1.component.spec.ts import { ComponentF…

项目被os x占用

xattr -d com.apple.FinderInfo 空格后拖入项目回车就行了转载于:https://www.cnblogs.com/EnzoDin/p/6565549.html

c语言编写pdf,编写并运行C语言程序.pdf

VC6.0 使用教程 &#xff1a;从 VC6.0安装到运行和调试 【详解版】VisualC6.0 简称 VC或者 VC6.0 &#xff0c;是微软推出的一款 C和 C编译器 &#xff0c;具有强大的可视化开发功能和调试功能。VC6.0是使用最多的版本 &#xff0c;非常经典 &#xff0c;很多高校将 VC6.0作为C…

前端学习(2327):angular之双向绑定

test1.component.html <p class"p1">test1 works!</p> <div (click)"clickDemo()" >我是div1的内容</div> <input (keyup)"onkey($event)" type"text"><form action"" #heroFrom"n…

android开发入门

下载ADT-17.0.0.zip打开eclipse->help->install new software将ADT-17.0.0.zip拖动到框中&#xff0c;去掉下面第一个和第四个复选框&#xff08;需要连接网络获取新版本信息&#xff09;下一步……ADT中下载各个版本的android系统模拟包安装好后重启File->New->An…

mysql主键异常(冲突)

抛出异常&#xff1a;detached entity passed to persist: org.booking.entity.Admin 这个时候你做session.save()添加&#xff0c;entityManager.persist()添加也好&#xff0c;你都不能添加成功。 解决方法&#xff1a;因为mysql有自增长的属性&#xff0c;并且实体也设置自增…

c语言去除图像斑点,武汉理工-图像检测与处理技术-实验报告.doc

学生学号 0121304940834实验课成绩学 生 实 验 报 告 书实验课程名称图像检测与处理技术开 课 学 院机电工程学院指导教师姓名刘清元学 生 姓 名李勇学生专业班级测控13042015--2016学年第2学期实验教学管理基本规范实验是培养学生动手能力、分析解决问题能力的重要环节&#x…

前端学习(2328):angular之模板

test2.component.html <p>test2 works!</p> <a href"{{url}}">百度</a> <a [href]"url">百度2</a>test1.component.spec.ts import { ComponentFixture, TestBed } from angular/core/testing;import { Test2Compon…

Struts2学习总结(完整版)

Struts2学习总结&#xff08;完整版&#xff09; 一、搭建struts2环境 1、jar包的导入 主要是到 解压其中的一个工程&#xff0c;得到里面lib下包含的jar包 把这里的所有的jar包拷贝到项目的 WEB-INF目录下的lib文件夹下面。 2、配置struts.xml文件 注意&#xff1a;必须要放在…

打开word时出现“在加载ThisDocument时出现错误”

有可能软件兼容性不行或者就是安装时没有安装正版软件&#xff0c;有些模块没有加载进去就无法打开文件现在有office 2007 建议保存的时候保存成97-03兼容模式

w ndows10电脑配置看哪里,Windows10怎么自动登录?Windows10自动登录的设置方法

在Windows10系统的默认状态下&#xff0c;我们登录系统是需要输入密码的&#xff0c;虽然输入登录密码可以较好的保护系统的安全&#xff0c;但是确实麻烦了不少&#xff0c;因此很多用户想要设置Windows10自动登录&#xff0c;那么该如何操作呢&#xff1f;下面小编给大家介绍…

联想电脑g470 vs2010很卡 问题解决

联想电脑g470 vs2010很卡&#xff0c;尤其是aspx设计器&#xff0c;根本都输入不了文字。 解决办法在桌面右键&#xff0c;显示卡属性&#xff0c;电源&#xff0c;可切换显示卡方式&#xff0c;选择手动或根据电源选择图形处理器&#xff0c;最后点应用…等几秒在看下效果

前端学习(2329):angular之路由

app.component.css .us{color: red; } .active{color: aquamarine; }app.component.js <div style"text-align:center"><h1>welcome to {{title}}</h1><div style"color:#f00000">我是歌谣</div><div>{{name}}</…

做一个常规的banner图——负边距的使用、banner图的拼法

在这之前&#xff0c;首先要了解如何设置块级元素在块级元素水平居中 方法&#xff1a; 设置子容器为定位元素水平居中 left&#xff1a;50%&#xff1b;margin-left&#xff1a;-width/2&#xff1b;垂直居中 top&#xff1a;50%&#xff1b;margin-top&#xff1a;-width/2&a…