Python类方法、静态方法和实例方法的区别

 1 #-*- encoding:utf-8 -*-
 2
 3 class Date(object):
 4     def __init__(self, year, month, day):
 5         self.year = year
 6         self.month = month
 7         self.day = day
 8
 9     #实例方法
10     def tomorrow(self):
11         self.day +=1
12
13     #静态方法(缺点:需要写入固定的类方法名Date)
14     @staticmethod
15     def parse_from_string(data_str):
16         year, month, day = tuple(data_str.split("-"))
17         return Date(int(year), int(month), int(day))
18
19     #类方法(传入cls类本身,无需固定类方法名Date)
20     @classmethod
21     def parse_string(cls, data_str):
22         year, month, day = tuple(data_str.split("-"))
23         return cls(int(year), int(month), int(day))
24
25     def __str__(self):
26         return "{year}/{month}/{day}".format(year=self.year, month=self.month, day=self.day)
27
28 if __name__ == "__main__":
29     data_str = "2018-6-29"
30     #调用实例方法
31     data = Date(2018,6,29)
32     data.tomorrow()
33     print(data)
34     #调用静态方法
35     print(Date.parse_from_string(data_str))
36     #调用类方法
37     print(Date.parse_string(data_str))

原文地址:https://www.cnblogs.com/Phantom3389/p/9240860.html

时间: 2024-08-28 03:24:50

Python类方法、静态方法和实例方法的区别的相关文章

java 静态方法和实例方法的区别

静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象.   静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制.   下面几个例子展示了这一区别.   1.调用静态方法示例. //-----------hasStaticMethod.j

静态方法和实例方法的区别(转)

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制. 下面几个例子展示了这一区别. 1.调用静态方法示例. //-----------hasStaticMethod.java-----

编写高质量代码改善C#程序的157个建议——建议100:静态方法和实例方法没有区别

建议100:静态方法和实例方法没有区别 静态方法在加载时机和内存使用上和实例方法完全一致.在这里,我们先引出一个概念“类型对象”.比如类型Person,我们都知道new Person() 会产生一个对象,这个对象叫做“实例对象”,它在运行时会加载到GC Heap上.而“类型对象”是指代表Person类型本身的那个对象,这个对象在第一次使用类型时被加载到Loader Heap上.类型对象包括其自身的指针.自身的同步索引快.静态字段,以及一个方法表.在这个方法表中,无论是静态方法还是实例方法都会被存

java 静态方法和实例方法的区别(转)

静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象.   静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制.   下面几个例子展示了这一区别.   1.调用静态方法示例.   //-----------hasStaticMethod

Java | 基础归纳 | 静态方法与实例方法的区别

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制. 来源:https://www.cnblogs.com/shenliang123/archive/2011/10/27/222692

Python的类方法,静态方法,实例方法的区别

Python的方法并不想C#,Java这些编译性语言那样严格的区分静态方法和实例方法.也就是说Python的静态方法,类方法和实例方法只是在调用上有区别,类型和实例都可以调用.一般规则如下:A:实例方法:没有@classmethod和@staticmethod标记的方法是实例方法.假设这个有n个比传参数,类型调用的时候需要给n个参数传参.而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身:因为有这个规定,所以实例方法如果没有参数,则实例是无法调用的,但类型可以调用.B:类方

python中静态方法,实例方法,类方法

实例方法的调用离不开实例,我们需要把实例self传递给函数,类方法一样,需要把cls传递给函数 原文地址:https://www.cnblogs.com/-hjj/p/10048377.html

C#静态方法和实例方法的区别

C#中静态与非静态方法比较 C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 下面我们分四个方面来看看C#静态方法与非静态方法的差异: C#静态方法与非静态方法比较一. C#静态成员: ①静态成员属于类所有,非静态成员属于类的实例所有.

静态方法和实例方法的区别

使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态成员属于类所有,非静态成员属于类的实例所有. 每创建一个类的实例,都会在内存中为非静态成员新分配一块存储:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.  C#静态方法属于类所有,类实例化前即可使用. 非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员. 因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存. 它不属于类的某一个具