正确理解实例方法、类方法、静态方法
实例方法
实例方法在我理解中,只能对对象调用,规定实例方法的函数中必须有self
def movie(self):if self.__age>18:print('%s正在看岛国爱情片'%self.__name)else:print('小孩子还是看熊出没吧')
在定义对象之后,将消息都传给这个‘self’,也就是对象本身,所以说必须是对对象用,而不能对类使用
静态方法
在这里可以用一个例子来说明。
如果我们想计算一个三角形的面积和周长,但是给你的只有三个数,那么我们就需要首先判断这三个数能否构成三角形,因为这时候三角形都没构成,自然也就没构成三角形这一对象,所以判断函数应该使用静态方法,静态方法不需要self
from math import sqrtclass Triangle(object):def __init__(self, a, b, c):self._a = aself._b = bself._c = c@staticmethoddef is_valid(a, b, c):return a + b > c and b + c > a and a + c > bdef perimeter(self):return self._a + self._b + self._cdef area(self):half = self.perimeter() / 2return sqrt(half * (half - self._a) *(half - self._b) * (half - self._c))def main():a, b, c = 3, 4, 5# 静态方法和类方法都是通过给类发消息来调用的if Triangle.is_valid(a, b, c):t = Triangle(a, b, c)print(t.perimeter())# 也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数# print(Triangle.perimeter(t))print(t.area())# print(Triangle.area(t))else:print('无法构成三角形.')if __name__ == '__main__':main()
注意静态方法函数的上面需要@staticmethod
类方法
跟他的名字一样,类方法是直接对类的函数,其实类也可以称作对象,毕竟万物皆对象。类方法的函数与实例方法类似,函数的参数中必须有‘cls’。在主函数中直接调用类名来搞得函数。
from time import time, localtime, sleepclass Clock(object):"""数字时钟"""def __init__(self, hour=0, minute=0, second=0):self._hour = hourself._minute = minuteself._second = second@classmethoddef now(cls):ctime = localtime(time())return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec)def run(self):"""走字"""self._second += 1if self._second == 60:self._second = 0self._minute += 1if self._minute == 60:self._minute = 0self._hour += 1if self._hour == 24:self._hour = 0def show(self):"""显示时间"""return '%02d:%02d:%02d' % \(self._hour, self._minute, self._second)def main():# 通过类方法创建对象并获取系统时间clock = Clock.now()while True:print(clock.show())sleep(1)clock.run()if __name__ == '__main__':main()
正确理解实例方法、类方法、静态方法相关推荐
- 软件测试学习 之 Python 类属性 实例属性、实例方法 类方法 静态方法
本篇的主要内容是自己的手动操作的学习记录,关于个名词的理论概念参见以下文章: Python 实例方法.类方法.静态方法的区别与作用 作者:蔷薇Nina 出处:博客园 python3类对象.实例对象.类 ...
- 类方法的实例python_Python Class 的实例方法/类方法/静态方法
实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...
- Python的实例方法,类方法,静态方法之间的区别及调用关系
如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...
- 实例方法 类方法 静态方法
1 实例方法 2 类方法 3 静态方法 4.@property 5.区别 1.实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为"self",通过它来传递实例的属性和方法 ...
- 理解method(实例方法), staticmethod(静态方法)和classmethod(类方法)的区别
1.概述 Python中定义在类中的函数称作方法, 可以通过装饰器@staticmethod 和@classmethod将其转换成静态方法, 和类方法. 本文将通过实例帮大家理解其中的区别, 以便 ...
- Python学习10 内置属性 对象属性 类属性 私有属性 私有方法 对象方法 类方法 静态方法
内置属性 创建类时系统自动创建的属性 # 内置属性:dir(对象),列出所有的内置属性 class Person(object):'''Person类1'''# Person类2__slots__ = ...
- python static方法_浅谈python 类方法/静态方法
1.类方法 类方法是从属于"类对象"的方法.类对象可以通过装饰器@classmethod来定义,具体格式如下: @classmethod def 类方法名(cls [, 形参列表] ...
- python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...
和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法.实例方法和静态方法. 和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为 ...
- python用类名直接调用方法_Python类的实例方法、静态方法、类方法详解,附代码示例...
实例方法 普通实例方法(instance method),第一个参数需要是self,它表示一个具体的实例本身,只能被实例对象调用,通过self引用的可能是类属性.也有可能是实例属性. 实例方法访问类属 ...
最新文章
- 体素法滤波(附实现代码)
- centos误删除文件如何恢复
- Verdi-ug --- nwave Tutorial
- .Net业务搭配实用技术栈
- 顺序循环队列队满队空的两种判别方式
- 基础知识巩固四(问题部分)
- 如何解决padding标记在ie7、ie6以及firefox中的兼容问题
- php用wordanalysis抓取姓名_利用vba查询/抓取 外部数据
- lisp文字上标源码_删除重叠文字源码 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - 源码,程序 - Powered by Discuz!...
- ISE创建Microblaze软核(三)
- NetTiers学习笔记09---RADGrid + EntityDataSource设置默认排序, 及表格自动排序,分页的方法...
- httprequest存储的是字符内容 而文本内容是以字节形式上传的;所以普通的取值方式无法从httprequest取到值...
- 计算机博弈 基础算法 阿尔法-贝塔剪枝算法 α-β剪枝算法
- 飞冰 - ICE Design Pro 使用指南
- Excel2——在同一个图中如何绘制多条曲线并标注图例
- 流氓软件广告屏蔽大师 处理方式
- katalon等待时间、断言、setup teardown
- 中国四大名著.html
- 1.3寸OLED IIC驱动右方出现两列像素白边的解决方法
- 农夫山泉(数据范围是亮点)