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。

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

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

类方法的作用如下:

①方便类直接调用。

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

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

文章“【Python基础知识】Python类的类属性、实例方法和类方法”已帮助

>>本文地址:https://www.ujiuye.com/zhuanye/2021/66400.html

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

1 您的年龄

2 您的学历

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

获取测试结果
  • 大前端大前端
  • 大数据大数据
  • 互联网营销互联网营销
  • JavaJava
  • Linux云计算Linux
  • Python+人工智能Python
  • 嵌入式物联网嵌入式
  • 全域电商运营全域电商运营
  • 软件测试软件测试
  • 室内设计室内设计
  • 平面设计平面设计
  • 电商设计电商设计
  • 网页设计网页设计
  • 全链路UI/UE设计UI设计
  • VR/AR游戏开发VR/AR
  • 网络安全网络安全
  • 新媒体与短视频运营新媒体
  • 直播带货直播带货
  • 智能机器人软件开发智能机器人
 

快速通道fast track

近期开班时间TIME