您的位置:首页 > 编程语言 > Python开发

Python面向对象3:静态/动态字段、静态/动态方法、单例模式

2017-12-24 00:00 507 查看
Python中的类成员,包括方法、字段、属性。
“字段”和“方法”都有“动态”和“静态”之分,即:
字段
- 静态字段:仅保存在类中
- 普通(动态)字段:保存在对象中
方法

- 静态方法
- 普通(动态)方法
- 类方法

1、静态字段、动态字段
案例1:区分静态字段与动态字段,存储位置不同。静态字段在类中定义,动态字段在方法中定义。
案例中的country就是字段,name就是普通字段class province:
country="中国"#静态字段,保存在类中
  def __init__(self,name):
self.name=name #普通字段,保存在对象中
案例2:静态字段与动态字段调用,可以在类中定义方法调用
class province:
country="中国"##静态字段
  def __init__(self,name):
self.name=name #普通字段
  def show(self):
print(self.country)
print(self.name)
#通过方法调用
shanghai=province("上海")
shanghai.show()
执行结果:



案例3:静态字段与动态字段调用,在不用方法时调用时,最好是自己的成员自已访问。
即:动态字段只能用对象访问,静态字段最好用类访问,但万不得己的情况下,也可以使用对象访问。class province:
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:静态方法、类方法由类来调用,而普通方法由对象来调用;class province:
country="中国"
   def __init__(self,name):
self.name=name
def show(self):#show是普通方法
     print(self.country)
print(self.name)

@staticmethod#静态方法关键词
   def f1(a1,a2):#f1不需要self
       print(a1,a2)

@classmethod #类方法比静态方法多了一个功能,就是自动传递类名
   def f2(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

9fc6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: