400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Python类的类属性、实例方法和类方法

【Python基础知识】Python类的类属性、实例方法和类方法

1、类属性

类属性与实例属性不同。一个类的所有实例的值都相同的属性称为类属性。所有实例都共享类属性的值。类属性是在类级别定义的,而不是在构造方法__init__()方法内部定义的。与实例属性不同,使用类的名称访问类属性:

  1. >>> class Cat: 
  2. ...     name = 'Mimi' 
  3. ... 

上述Cat类包括一个名为name的类属性,可以使用类名称访问该属性:

  1. >>> Cat.name 
  2. 'Mimi' 

Cat类的每个实例都可以使用点表示法访问该属性:

  1. >>> mimi = Cat() 
  2. >>> miaomiao = Cat() 
  3. >>> mimi.name 
  4. 'Mimi' 
  5. >>> miaomiao.name   # mimi和miaomiao的name都为'Mimi' 
  6. 'Mimi' 

但是,改变某个实例的类属性不会影响其他实例,它只会影响当前实例:

  1. >> class Cat: 
  2. ...     name = 'Mimi' 
  3. ... 
  4. >>> mimi = Cat() 
  5. >>> mimi.name 
  6. 'Mimi' 
  7. >>> mimi.name = 'MIMI'   # 将mimi的name属性改为大写 
  8. >>> mimi.name 
  9. 'MIMI' 
  10. >>> Cat.name   # Cat类的name属性并没有改变 
  11. 'Mimi' 
  12. >>> miaomiao = Cat()   # 新实例化一个实例 
  13. >>> miaomiao.name   # 新实例的name并没有受到前一个实例影响 
  14. 'Mimi' 

2、实例方法

可以使用def关键字在类中定义任意数量的方法。方法的第一个参数通常为self,它用来引用和调用实例。在类中定义方法和定义普通的函数没有太多区别。下面在Cat类中定义了一个名为eat的方法:

  1. >>> class Cat: 
  2. ...     def __init__(self, name, age): 
  3. ...         self.name = name 
  4. ...         self.age = age 
  5. ...     def eat(self): 
  6. ...         print('{1}岁的{0}正在进食'.format(self.name, self.age)) 
  7. ... 

可以使用实例调用类的实例方法:

  1. >>> mimi = Cat('Mimi'1
  2. >>> mimi.eat() 
  3. 1岁的Mimi正在进食 

【Python基础知识】Python类的类属性、实例方法和类方法

3、类方法

类方法是将类本身作为对象进行操作的方法,也就是说,类方法调用的是类变量和类方法。类方法的语法格式如下:

@classmethod

def 方法名(cls[,参数]):

方法体

类方法使用@classmethod装饰,第一个参数为cls隐含参数,其余参数是可选的。下面给出两个简单的类方法的示例,第一个示例是创建只含有默认参数的类方法:

  1. @classmethod 
  2. def cfun(cls): 
  3.     print('成功进入类方法'

第二个示例是创建含有其余参数的类方法:

  1. @classmethod 
  2. def cfun(cls, name): 
  3.     cls.name = name 
  4. print('成功进入类方法'

调用类方法有两种方式,一种是类外调用,采用“类名.方法名(参数)”的形式;另一种是类内调用,采用“cls.方法名(参数)”的形式:

  1. >>> class play_game(object): 
  2. ...     top_score = 100 
  3. ...     @classmethod 
  4. ...     def look_again(cls): 
  5. ...         print('再次查看最高分数:%d' % cls.top_score) 
  6. ...     @classmethod 
  7. ...     def look_socre(cls): 
  8. ...         print('最高分数:%d' % cls.top_score) 
  9. ...         cls.look_again()   # 类内调用 
  10. ... 
  11. >>> play_game.look_socre()   # 类外调用 
  12. 最高分数:100 
  13. 再次查看最高分数:100 

上述程序中,在类外采用“类名.方法名(参数)”的形式调用了类方法look_socre()。look_socre()类方法用@classmethod进行了装饰,并且内部调用了类属性top_score,打印最高分数;然后在类内采用“cls.方法名(参数)”的形式调用了另一个类方法look_again()。look_again()类方法的的功能是再次打印最高分数。因此,执行类调用代码后,先执行look_socre()类方法中的打印语句,后执行look_again()类方法中的打印语句。

例如,创建一个学生类(Student),类属性city的默认值为'北京';在类中创建一个类方法get_city(),该类方法的功能是打印类属性。利用类方法set_city()修改城市,代码如下:

  1. >>> class Student: 
  2. ...     city = '北京' 
  3. ...     @classmethod 
  4. ...     def get_city(cls): 
  5. ...         print('城市:'cls.city) 
  6. ...     @classmethod 
  7. ...     def set_city(cls, cty): 
  8. ...         cls.city = cty 
  9. ... 
  10. >>> Student.get_city() 
  11. 城市: 北京 
  12. >>> Student.set_city('上海'
  13. >>> Student.get_city() 
  14. 城市: 上海 

下面比较一下类方法与实例方法的相同点和不同点。

类方法与实例方法的相同点如下:

①都可以在类内调用。

②都可以通过实例调用。

类方法与实例方法的不同点如下:

①类方法第一个默认参数为cls;实例方法第一个默认参数为self。

②类方法可以通过类名直接调用。

③类方法内只能调用类属性和类方法。

类方法的作用如下:

①方便类直接调用。

②可以修改类属性和类方法。

③减少创建多个实例时所占用的内存空间,加快运行速度。

课程好礼申请领取
您的姓名
您的电话
意向课程
 

中公优就业

官方QQ

扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道
 
 
网站地图 五星彩票网站正规吗 cc彩票开户 cc彩票客户端下载
申博太阳娱乐城 菲律宾申博官网代理 太阳申博开户 太阳城赌城网址
新生彩票山东11选5 11.659msc.com 京城app版 大都会线上娱乐登入
五星彩票app下载 500万彩票网站电脑版pc 58彩票网注册 五星彩票注册
58彩票安卓版 500w彩票电脑版 五星彩票注册 500w彩票网官网
444BBIN.COM 666xsb.com 8LSS.COM 3466111.COM 558XTD.COM
558XTD.COM 517psb.com 8JZS.COM ex138.com 917psb.com
1116118.COM TONGSHISHI.COM 666xsb.com 67jbs.com 1112978.COM
153sun.com S618Z.COM 88sbsun.com 587sunbet.com DC238.COM