staticmethod的意义(static 的作用)
staticmethod和classmethod的区别
静态方法无绑定,和普通函数使用方法一样,只是需要通过类或者实例来调用。没有隐性参数。
类方法通过隐性参数绑定在类上,函数内可通过隐性参数进行实例生成。
实例方法通过隐性参数绑定在类上,函数内通过隐性参数访问实例属性。
用个例子来解释一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#
class Date(object):
def __init__(self, day=0, month=0, year=0):
self.day = day
self.month = month
self.year = year
def __str__(self):
return "{0}-{1}-{2}".format(self.year, self.month, self.day)
@classmethod
def from_string(a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBPhckryNBuynkPAP-nhfL0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnWmYn1b1rj0dPj6vrj6dPHmd" target="_blank" class="baidu-highlight"cls/a, date_as_string):
year, month, day = map(int, date_as_string.split('-'))
date1 = a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBPhckryNBuynkPAP-nhfL0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnWmYn1b1rj0dPj6vrj6dPHmd" target="_blank" class="baidu-highlight"cls/a(day, month, year)
return date1
@staticmethod
def is_date_valid(date_as_string):
year, month, day = map(int, date_as_string.split('-'))
return day = 31 and month = 12 and year = 3999
@staticmethod
def millenium(month, day):
return Date(month, day, 2000)
class DateTime(Date):
def __str__(self):
return "{0}-{1}-{2} - 00:00:00PM".format(self.year, self.month, self.day)
if __name__=="__main__":
s='2012-09-11'
if Date.is_date_valid(s):
date1 = Date.from_string('2012-09-11')
print date1
date2 = DateTime.from_string('2012-09-11')
print date2
millenium_new_year1 = Date.millenium(1, 1)
print millenium_new_year1
millenium_new_year2 = DateTime.millenium(10, 10)
print millenium_new_year2
委托类型的问题
1. 委托名
2.方法名
3.方法名
4.void 后面只能根方法名
5.定义一个委托,myClass.staticMethod是与委托类型,同签名的静态方法
java中static关键字的意义
上述代码块运行的结果为:
上述代码块运行的结果为:
1. static关键字 : 静态的意思。可以修饰成员变量和成员方法。
2. static关键字的特点
A : 随着类的加载而加载
B : 优先于对象存在
C : 被类的所有对象共享
这其实也是我们判断该不该使用静态的依据。
同一个班级的学生应该共用同一个班级编号。
饮水机 (用静态修饰)
水杯 (不能用静态修饰)
D : 可以通过类名调用
既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。
3. static关键字的注意事项
A : 在静态方法中没有this关键字,如何理解呢 ?
静态是随着类的加载而加载,this是随着对象的创建而存在。
静态比对象先存在。
B : 静态只能访问静态。
静态方法只能访问静态的成员变量。
静态方法只能访问静态的成员方法。
非静态方法可以访问静态和非晶态的成员变量。
非静态方法可以访问静态和非晶态的成员方法。
4. 静态变量和成员变量的区别
A : 所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B : 内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C : 生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D : 调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用