首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171224G0MUTQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券