文章目录

  • 抽象特点
  • 具体细节
  • 总结

抽象特点

Python 一切皆 对象 object 基于此概念 class 实现了以下特性

  • 类与实例 Instance 的属性

类对象创建时可直接在类中定义类属性与实现一些逻辑。创建实例对象时,首先,执行类中直接定义的属性与其他非方法代码,其次,执行类的 __init__ 构造方法初始化,其中可定义实例属性与实现一些逻辑

实例对象自动继承类中定义的类属性,同时也会自动继承 __init__ 构造方法中定义的实例属性,当两者重合发生命名空间冲突,优先级更高的实例属性会进行重写 override(如果是函数需要使参数列表与原函数一致,返回类型与原函数一致),最终成为实例对象中的该属性

  • 实例方法、类方法 classmethod 和静态方法 staticmethod 的参数

实例方法是与实例绑定的函数,定义实例方法需要定义 self 形参(与一般函数的形式区别)

类方法和静态方法是通过装饰器实现,类方法是需要传入 cls 参数的函数,静态方法无需传入 self 参数或者是 cls 参数(但也能传入参数)

其中 self 参数指向实例对象 cls 参数指向定义的类对象(selfcls 是约定俗成的,原则上可以用其它名字),因此类对象不能直接调用类中定义的实例方法,只能间接的创建实例再通过 class.method(Instance) 的方式调用(此时 Instance 不能省略,因为调用方法的是类对象而不是实例对象,Python 无法自动得到 self 此时实例方法的参数列表就不匹配了,将无法正确执行),实例对象可以直接使用 Instance.method() 的方式调用实例方法(此时 self 被自动得到隐式传入到实例方法的参数列表中),虽然有语法上的区别,但是对于 Python 解释器而言两者等价

支持运算符重载 overload(函数名相同但参数不同),可以对类的专有方法 __str____add__ 等进行重载从而让类对象及其实例对象能够使用运算符操作

  • 方法 method 与函数 function

编程中方法用于类对象的语境,可以认为类对象绑定的函数就是方法,没有绑定关系就是函数

具体细节

  • 类举例
class Toy(object):  # 此处此类可理解为设计一个Toy的蓝图,类名通常采用大驼峰格式# 赋值定义类属性,记录所有玩具数量count = 0def __init__(self, name):  # 用于实例初始化self.name = name# 类属性 +1Toy.count += 1@classmethod  # 此装饰器表示是类方法,类方法无需创建实例对象即可调用,最为灵活def show_toy_count(cls):print('玩具对象的数量 %d' % cls.count, cls)@staticmethod  # 此装饰器表示是静态方法,静态方法本质上是封装在类对象内的的函数,常用于测试def hi():print('Hello!')# 实例方法def beybey(self):print('Sad!', self)# 创建实例对象
toy1 = Toy('乐高')
toy1.hand = 2
toy2 = Toy('泰迪熊')
toy3 = Toy('哥斯拉')
print(toy1.name, toy2.name, toy3.name)# 点语法调用类方法与静态方法,如:类名.方法
Toy.show_toy_count()
Toy.hi()
# 实例对象调用类方法时,与类对象调用类方法无异,但实际上调用仍通过实例对象继承的类对象
toy1.show_toy_count()
print(toy1.hand)
# 实例对象调用静态方法时,与类对象调用静态方法无异,但实际上调用仍通过实例对象继承的类对象
toy2.hi()
# 实例对象调用实例方法,Python的解释器内部,当我们调用toy3.beybey()时,实际上Python解释成Toy.beybey(toy3)
toy3.beybey()
# Toy.beybey()  # 错误语法,self必须指向实例对象,此处实例方法指向类对象而不是实例对象,因此需要写上实例对象不能省略
Toy.beybey(toy3)
# 类与其实例的类型和内存地址
print(type(Toy), id(Toy), type(toy3), id(toy3))
  • 输出结果
乐高 泰迪熊 哥斯拉
玩具对象的数量 3 <class '__main__.Toy'>
Hello!
玩具对象的数量 3 <class '__main__.Toy'>
2
Hello!
Sad! <__main__.Toy object at 0x000001FD9F794D60>
Sad! <__main__.Toy object at 0x000001FD9F794D60>
<class 'type'> 2188806599664 <class '__main__.Toy'> 2188813880672
  • 类方法与静态方法举例
class Cat:  # 或者class Cat()不写父对象形式定义类对象,会默认继承祖先object对象name = '小敏'@classmethoddef www(cls):print('%s 干嘛!' % cls.name)# cls.call()  # 类方法可以调用静态方法@staticmethoddef call():print('喵喵~')Cat.name = '小敏臭弟弟'print(Cat.name)# Cat.www()  # 静态方法可以调用类方法Cat.www()
Cat.call()
# 没有定义实例方法可以创建实例对象继承并使用类其中定义的方法
cat1 = Cat()
cat1.www()
cat1.call()
# 类属性可以等于另一个类
cat2 = Cat()
cat2.name = 'geigei'
Cat.name = Toy
cat1.other = toy1
cat2.other = toy2
  • 输出结果
小敏 干嘛!
喵喵~
小敏臭弟弟
小敏臭弟弟 干嘛!
喵喵~
小敏臭弟弟
  • 祖先对象中包含的基本方法
print(dir(object))['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

总结

classPython 中最核心的对象 object,定义类通常要写好类属性,实例方法,类方法,静态方法等几部份。把类和继承的类的实例比作函数中的主函数和子函数,那么 类属性 可认为是全局变量,实例属性 可认为是局部变量;把类看成葫芦,实例方法 则是方便我们照画瓢的同时,提供因地制宜的可能;类方式 能够使我们更高效的使用类的功能而 静态方法 往往能帮助我们了解类的功能

类的各方法间并不是彼此毫不相干,而是有着很强的共性,设计的目的是为了提升编程效率,因此具体使用时应灵活运用,不必局限在抽象的定义之中

Python的类对象相关推荐

  1. Python: 自定义类对象序列化为Json串

    之前已经实现了Python: Json串反序列化为自定义类对象,这次来实现了Json的序列化. 测试代码和结果如下: import Json.JsonToolclass Score:math = 0c ...

  2. python保存类对象_python 存储类对象吗

    Python源码读后小结 Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象( ...

  3. Python将类对象转换为json

    def demo():# 1.定义一个Student类class Student(object):# 初始化中给对象属性赋值def __init__(self, name, age, phone):s ...

  4. python释放类对象_Python 基本功: 10. 面对对象-类 Class

    虽然 Python 可以写函数式编程,但是本质上是一门面对对象编程语言 (object-oriented programming language),简称 oop.面对对象编程是把代码包装成一个对象 ...

  5. 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?

    JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": ...

  6. [转载] 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?

    参考链接: python json 12: numpy转换为json数据 JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你 ...

  7. python保存类对象到文件_python存储对象到文件

    1.pickle包 (1).将内存中的对象转换成为文本流: import pickle # define class class Bird(object): have_feather = True w ...

  8. python类的定义和创建_Python类对象的创建和使用

    通过前面章节的学习,我们已经学会如何定义一个类,但要想使用它,必须创建该类的对象. 创建类对象的过程,又称为类的实例化. 类名(参数) 定义类时,如果没有手动添加 __init__() 构造方法,又或 ...

  9. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

最新文章

  1. mysql 视图 临时表模式
  2. win10 搭载文件服务器,win10远程文件服务器
  3. centos6,7的启动流程
  4. oracle的脚本语言是什么意思,Oracle中的sql脚本语言中的循环语句介绍
  5. 启动后显示不了数据_90后都买不起房?统计数据显示:90后成了城市租房主力!...
  6. 监测http端口是否存活
  7. 聚合函数的计算机控件,sql – 当我们在联接中使用聚合函数时如何使用Group By子句?...
  8. 详解BSCI实验二、配置ospf验证,汇总,虚链路
  9. mac苹果电脑安装非app store软件无法安装的解决办法
  10. java车牌号识别EasyPR_EasyPR
  11. KinectSDK + Unity3D学习总结
  12. SiliconLab zigbee host移植到IPQ 807X平台
  13. audio或video标签的autoplay属性的说明
  14. 8.绘制统计图形——直方图
  15. VMware虚拟机如何联网详解
  16. 2022年度浦东新区科技发展基金社会领域数字化转型专项立项公示
  17. 计算机名加用户名盘符,硬盘该如何修改盘符名D/E/F/?
  18. 了解公司企业:Noto IT Solutions
  19. mysql外键约束怎么写_mysql外键约束怎么写
  20. 【代码随想录】刷题笔记Day5

热门文章

  1. 微信小程序请求封装及案例展示
  2. 如何在Linux系统下安装英特尔® Arc™系列独立显卡驱动以及进行AI推理性能测试...
  3. 重走长征路---OI每周刷题记录---9月21日 2013 AC 17题
  4. redis原理之快照(rdb)原理
  5. 一支口红用了5年_一支口红能用多久?
  6. 银行卡实名认证增强版API开发文档
  7. Elastic 认证(ECE)2021 年 7 月版本升级解读
  8. Java Agent介绍及其使用
  9. iOS---开发者账号团队邀请成员/管理员
  10. Fiddler抓HTTPS包配置和抓手机包配置