400-650-7353

精品课程

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

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

  • 发布: python培训
  • 来源:python干货资料
  • 2021-02-09 15:44:34
  • 阅读()
  • 分享
  • 手机端入口

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。 一键加群

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

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,领80G学习资料
QQ交流群
领取免费网课
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
领取80G学习资料

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

1 您的年龄

2 您的学历

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

获取测试结果
 
课程资料、活动优惠 领取通道