1、字段 (普通字段,静态字段)
字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同
普通字段,存在对象中,通过对象访问
静态字段,存在类中,通过类名访问
静态字段的又一种用法,当需要访问多个方法中的普通字段,但是这些普通又都是相同的时候,我们就可以把它定义在类中,成为静态字段
class Person(object):
company = 'chuchujie' #静态字段
def __init__(self,name,age,sex):
self.name = name #普通字段
self.age = age
self.sex = sex
# 访问静态字段
print Person.company
#访问普通字段
P1 = Person('allen','25','male')
print P1.age
2、方法 (普通方法、类方法、静态方法)
方法包括: 普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同
普通方法,通过对象触发,对象执行方法时自动把自己当作参数赋值给self(self是形式参数)
类方法,需要通过@classmethod装饰器装饰,同时方法的第一个参数是 “cls”
通过类触发,类对象执行时自动把自己当作参数传给cls
静态方法,没有默认参数(可以加任何参数)
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def f1(self):
print "f1"
@classmethod
def f2(cls): #类方法
print "f2"
@staticmethod
def f3(): #静态方法
print "f3"
#普通方法执行:
P1=Person()
P1.f1()
#类方法执行:
Person.f2()
#静态方法执行:
Person.f3()
总结:
普通方法,对象触发,至少一个参数(self),也可以加其他参数
类方法,类触发,只能有一个参数且只能是cls参数,不能为其他参数(如果你想是其他参数也是可以,但是告诉你这样做是不规范的,所以我们认为只能是cls参数,cls 表示class)
静态方法,可以加任意参数
对于调用:
普通方法: 对象调用
类方法 和 静态方法: 类调用
对于参数:
普通方法: 至少一个self
类方法: 只能一个参数,cls
静态方法: 任意参数
3、属性
普通属性:在类方法上面加上@property装饰器,就变成了属性
属性其实是普通方法的变种(python中,属性还用的特别少,因为功能还不够完善,对于其他语言,其他语言用的比较多了)
属性的定义有两种方式:
装饰器: 在方法上加上装饰器
静态字段: 在类中定义值为property对象的静态字段