Python中的类成员,包括方法、字段、属性。
“字段”和“方法”都有“动态”和“静态”之分,即:
字段
- 静态字段:仅保存在类中
- 普通(动态)字段:保存在对象中
方法
- 静态方法
- 普通(动态)方法
- 类方法
1、静态字段、动态字段
案例1:区分静态字段与动态字段,存储位置不同。静态字段在类中定义,动态字段在方法中定义。
案例中的country就是字段,name就是普通字段
classprovince:
country="中国"#静态字段,保存在类中
def__init__(self,name):
self.name=name#普通字段,保存在对象中
案例2:静态字段与动态字段调用,可以在类中定义方法调用
classprovince:
country="中国"##静态字段
def__init__(self,name):
self.name=name#普通字段
defshow(self):
print(self.country)
print(self.name)
#通过方法调用
shanghai=province("上海")
shanghai.show()
执行结果:
案例3:静态字段与动态字段调用,在不用方法时调用时,最好是自己的成员自已访问。
即:动态字段只能用对象访问,静态字段最好用类访问,但万不得己的情况下,也可以使用对象访问。
classprovince:
country="中国"
def__init__(self,name):
self.name=name
#调用访问:
henan=province("上海")
#动态字段,只能用对象访问
print('-------动态字段访问--------')
print(henan.name)
#静态字段,用类访问,万不得己的情况下,可以用对象访问
print('-------静态字段两种访问--------')
print(province.country)#类访问
print(henan.country)#对访问,但最好不要使用
案例4:字段的加载时间:静态字段在代码加载时,就已经创建完成,但动态字段只在调用方法时才创建
2、静态方法、动态方法、类方法
普通方法、静态方法、类方法,都属于类,但调用方法不同、参数不同、且含有不同的装饰器。
普通方法,就是在类中的形如def 方法(self,参数1,参数2)的方法,对象是用来封装数据的,普通方法就是为了去对象中取数据。
静态方法:在普通方法前加装饰器@staticmethod,同时去掉self形式参数,其他参数可以任意多个或0个。如果一个方法不使用对象(即不使用self)或不需要用对象的数据,建议创建成静态方法;
类方法:在普通方法前面加装饰器@classmethod,且方法中需要至少有cls形式参数,cls代指类名。类方法比静态方法多一个特征或功能,自动传递类名。用来创建对象时非常有用;
案例1:静态方法、类方法由类来调用,而普通方法由对象来调用;
classprovince:
country="中国"
def__init__(self,name):
self.name=name
defshow(self):#show是普通方法
print(self.country)
print(self.name)
@staticmethod#静态方法关键词
deff1(a1,a2):#f1不需要self
print(a1,a2)
@classmethod#类方法比静态方法多了一个功能,就是自动传递类名
deff2(cls):#cls代表类名。
print(cls)#此处也可以创建一个对象
#调用,实例化对象
henan=province("河南")#实例化
print('----普通方法由对象调用执行------')
henan.show()
print('----静态方法由类调用执行------')
province.f1('a1value','a2value')
print('----类方法由类调用执行------')
province.f2()
执行结果:
案例2:应用类方法,创造单例模式。
单例模式是设计模式中的一种。
单例模式:指创建唯一对象,单例模式设计的类只能实例 实例化1个对象。
执行结果:
案例链接:https://pan.baidu.com/s/1bpqCEqb 密码:p7sf
领取专属 10元无门槛券
私享最新 技术干货