-
Java中静态方法与非静态方法的区别
2017-10-21 23:44:49静态方法与非静态方法之间的区别: (1)静态方法中只能调用静态成员或者静态方法,不能直接调用非静态成员或方法,如果需要调用,则需要先实例化; (2)静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被...静态方法的结构:
其中static关键字即表示静态的。声明静态方法的语法如下:<访问修饰符>static返回类型 方法名(参数列表){//方法体}静态方法与非静态方法之间的区别:(1)静态方法中只能调用静态成员或者静态方法,不能直接调用非静态成员或方法,如果需要调用,则需要先实例化。(2)静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,非静态方法只有在类被实例化成对象时,对象调用该方法才被分配内存;(3)《Java编程思想》P86页有这样一段话:“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
这段话简而言之就是:静态方法可以方便在没有创建对象的情况下来进行调用(方法/变量);
-
python静态方法与非静态方法的区别_解析python 类方法、对象方法、静态方法
2020-12-17 12:26:12python中实现静态方法和类方法...1、我们已经讨论了类/对象可以拥有像函数一样的方法,这些对象方法与函数的区别只是一个额外的self变量# -*- coding:utf-8 -*-#!/usr/bin/python# Filename: method.pyclass Person:...python中实现静态方法和类方法都是依赖于python的修饰器来实现的。 对象方法有self参数,类方法有cls参数,静态方法是不需要这些附加参数的。
1、我们已经讨论了类/对象可以拥有像函数一样的方法,这些对象方法与函数的区别只是一个额外的self变量
# -*- coding:utf-8 -*-
#!/usr/bin/python
# Filename: method.py
class Person:
grade=1
def __init__(self,name):
self.name = name
def sayHi(self):#加self区别于普通函数
print 'Hello, your name is?',self.name
@staticmethod #声明静态,去掉则编译报错;还有静态方法不能访问类变量和实例变量
def sayName():#使用了静态方法,则不能再使用self
print "my name is king"#,grade,#self.name
@classmethod #类方法
def classMethod(cls):
print("class method")
p = Person("king")
p.sayHi()
p.sayName()
p.classMethod()
Person.classMethod()
输出:
Hello, your name is? king
my name is king
class method
class method
2、静态方法
要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。
静态方法是一类特殊的方法,有时可能需要写一个属于这个类的方法,但是这些代码完全不会使用到实例对象本身,例如:
class Student(object):
@staticmethod
def aver_age(x, y):
return x + y
def year(self):
return self.aver_age(self.month, self.day)
这个例子中,如果把aver_age作为非静态方法同样可以运行,但是它要提供self参数,而这个参数在方法中根本不会被使用到。这里的@staticmethod装饰器可以给我们带来一些好处,Python不再需要为Student对象实例初始化一个绑定方法,绑定方法同样是对象,但是创建需要成本,而静态方法可以避免这些。
Student().year is Student().year
Student().aver_age is Student().aver_age
Student().aver_age is Student.aver_age
False
True
True
可读性更好的代码,看到@staticmethod我们就知道这个方法并不需要依赖对象本身的状态。
可以在子类中被覆盖,如果是把aver_age作为模块的顶层函数,那么继承自Student的子类就没法改变Student的aver_age了如果不覆盖year的话。
3、 类方法
类方法与普通的成员函数和静态函数有不同之处,在接触的语言中好像也没见过这种语义,看它的定义:
一个类方法就可以通过类或它的实例来调用的方法, 不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。
记住:方法的第一个参数都是类对象而不是实例对象.
按照惯例,类方法的第一个形参被命名为 cls.任何时候定义类方法都不是必须的(类方法能实现的功能都可以通过定义一个普通函数来实现,只要这个函数接受一个类对象做为参数就可以了).
class Dog(object):
food = "gutou"
age = "1"
def __init__(self, name):
self.NAME = name
@classmethod
def eat(self,age): #只能是类中的变量
# print(self.NAME)
print(age)
print(self.food)
@classmethod
def eat1(self, age): # 只能是类中的变量
# print(self.NAME)
age = "2"
self.food = "tang"
@staticmethod
def print_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 类方法、对象方法、静态方法的资料请关注随便开发网其它相关文章!
-
静态方法与非静态方法的区别
2011-11-01 16:25:05非静态方法隐含了一个参数,这个参数是一个四位的指向heap所在实例的地址。 非静态方法不存在这个参数。非静态方法隐含了一个参数,这个参数是一个四位的指向heap所在实例的地址。
非静态方法不存在这个参数。 -
构造方法的作用及静态方法与非静态方法的区别
2017-09-18 20:36:401.构造方法的作用:用于对类的初始化,如果你没有写任何的构造方法,系统会默认给你取一个无参的构造方法,如果写了含参数的构造方法,无参的方法需要自己添加,系统不会自动添加。所以好的习惯是无参有参的构造方法...构造方法
1.构造方法的作用:用于对类的初始化,如果你没有写任何的构造方法,系统会默认给你取一个无参的构造方法,如果写了含参数的构造方法,无参的方法需要自己添加,系统不会自动添加。所以好的习惯是无参有参的构造方法都写。
2.例子:Hello hello=new Hello();//这里调用的是无参的构造方法; Hello hello=new Hello(“hi”);//这里调用的是有参的构造方法;
如果Hello类中已经有了一个有参数的构造方法,这时再使用 Hello hello = new Hello();来创建对象的时候就会出错,这就是为什么书上要强调写了有参数的构造方法就最好加一个无参数的构造方法.
静态方法与非静态方法的区别
1.静态方法是有static 关键字修饰的方法,在类被定义时已经被装载和分配了,而非静态方法在类定义时没有占内存,只有在类被实例化对象时,对象调用该方法才被分配内存。
2.静态方法只能调用静态成员和静态方法,而非静态方法既可调用静态方法或成员又可调用非静态方法和成员。
3.非静态成员只有被实例化之后才能被静态方法调用。 -
参数模型和非参数模型的区别
2015-03-01 15:17:57参数与非参数模型 用代数方程、微分方程、微分方程组以及传递函数等描述的模型都是参数模型。建立参数模型就在于确定已知模型结构中的各个参数。通过理论分析总是得出参数模型。非参数模型是直接或间接地从实际系统... -
静态方法与非静态方法的区别_python中类方法,实例方法,静态方法的作用和区别...
2020-12-10 09:47:12实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。类方法 定义:使用装饰器@classmethod。第一个参数... -
方法重载与重写的区别
2020-12-04 15:43:522.重载是在同一个类中,两个方法的方法名相同,参数列表不同(参数类型、顺序、个数),与方法返回值无关,可以有不同的修饰符 3.重写发生在父类和子类之间,子类继承父类方法(非构造、final、static修饰的方法)并... -
C#中静态方法和非静态方法的区别(一)
2019-10-01 10:54:38这一区别的外在表现为实例方法内可使用this关键字代表所从属的实例对象,而静态方法不可使用this因为静态方法不针对任何实例对象。实例对象调用静态方法会因参数中多出一个指向自己的指针(this)而发生错误。 定义... -
方法重写与方法重载的区别
2015-09-08 22:03:01(1)方法重写要求参数签名必须相同,而方法的重载要求参数签名必须不同。 (2)方法重写要求返回类型必须相同,而方法重载对此没有限制。 (3)方法重写只能用于子类重写父类的方法,而方法的重载用于同一个类的... -
Java方法重写(方法覆盖)与方法重载的区别
2020-07-11 12:20:37方法重写(方法覆盖)与方法重载的区别 方法重写 也称为方法覆盖,子类重写的方法必须与父类被重写的方法具有相同的方法名、参数列表和相同(或相容)的返回值类型,否则不构成重写 方法重写只针对实例方法,对于... -
参数学习:LR 与 SVM的区别?
2020-05-02 00:40:15什么是参数模型(LR)与非参数模型(SVM)? LR与SVM的联系与区别: 联系: 1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题) 2、两个方法都可以增加不同的正则... -
Spring声明式与编程式事务的区别,事务与非事务方法相互调用导致的事务不生效问题
2020-05-22 17:46:57序号 参数 含义 1 原子性(Atomicity) 事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。 2 一致性(Consistemcy) 事务前后,数据库的状态都满足所有的完整性约束。 3 隔离性(Isolation) ... -
.NET中的静态与非静态的区别分析
2021-01-01 06:03:26静态类与普通类的区别有以下几点: 1)静态类无法实例化而普通类可以; 2)静态类只能从System.Object基类继承;普通可以继承其它任何非static和非sealed类,但也只能继承一个类; 3)静态类不能继承接口;普通类... -
C#中静态与非静态——类、方法等区别
2015-01-27 11:02:55静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享。 静态类中的所有成员必须是静态的。 静态类可以有静态构造函数,静态构造函数不可继承。 静态构造函数可以用于静态类,也可用于非... -
Java 方法重载与重写的区别 表格
2021-01-19 19:43:572、非静态非私有的方法 方法定义方式 1、参数的顺序、个数、类型至少有一个不同;2、与返回值无关 1、参数必须相同;2、返回值必须相同 访问修饰符 无关 ... -
面向对象02:回顾方法的定义及调用(静态方法与非静态方法)
2020-11-07 21:04:29方法的定义: 修饰符 返回值类型 break(跳出switch,结束循环)和return(结束方法)的区别 方法名:注意规范----首写字母小写的驼峰规则 参数列表:(参数类型,参数名) 异常抛出:后续讲解 package ... -
python 中readLines()方法与readLine()方法的区别
2018-03-20 20:20:311、readLines()方法与readLine()方法比较 readlines()方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。如果碰到结束符 EOF 则返回空字符串。而readline()方法... -
面向对象之绑定方法与非绑定方法
2019-01-12 17:11:00四 classmethod与staticmethod的区别 五 练习 一 类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法。... -
[面试题]方法的重载与重写的区别?
2020-03-31 12:07:42注:方法的重载与方法的返回值无关! 构造器是可以重载的! 重写: (前提:在继承的基础之上,子类在获取了父类的结构以后,可以对父类中同名的方法进行“重构”) 方法的返回值,方法名,形叁列表形同;权限修饰符不小于... -
python非参数检验的区别_组间差异检验,终于有人讲清楚了!
2020-12-01 00:14:53什么是组间差异检验?就是组间的差异分析以及显著性检验,应用统计学上的假设检验方法,检验组间是否有差异及其差异程度。坦率地讲,所有的差异检验都基于一个假设:组...参数与非参数检验所以,本着负责的态度,在... -
方法的重写和方法的重载的区别
2019-01-05 15:02:14方法重写与方法重载的异同: (1)相同点: a.都要求方法同名。 b.都可以用于抽象方法和非抽象方法之间。 (2)不同点: a.方法重写要求签名必须一致,而方法重载要求参数个数或者类型不同必须不一致。 b.方法... -
三 面向对象之绑定方法与非绑定方法
2018-02-17 23:36:00三 classmethod和staticmethod的区别 一 绑定方法 绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法。 为类量身定制 类.boud_... -
我总结的call()与apply()方法的区别
2016-09-07 22:17:00【call()与apply()的区别】在ECMAScript中每一个函数都是function类型(是javascript的基本引用类型)的实例,具有一定的属性和方法。call()和apply()则是这个function类型的实例的方法。每个函数都包含这两个非继承... -
函数中apply()与call()方法 的区别
2019-03-15 16:37:45在js中每个函数都包含两个非继承而来的方法:call()和apply()方法; call和apply的作用都是在特定的作用域中将函数绑定到另外一个对象上去运行,即可以用来重新定义函数的执行环境,两者仅在定义参数方式上有所区别... -
关于offsetTop与offsetHeight的区别以及使用方法
2017-07-10 16:07:41offsetTop和offsetHeight是设置一个元素的位置和获取圆度大小经常会使用的参数,下面具体讲一下他们的区别于联系: 例如obj为html的一个元素对象, obj.offsetTop指的是obj距离上方或者父级元素(position非static...