• 售前

  • 售后

热门帖子
入门百科

Python中的类对象示例详解

[复制链接]
非究思身 显示全部楼层 发表于 2021-10-26 14:42:46 |阅读模式 打印 上一主题 下一主题
抽象特点


Python 齐备皆对象,基于此概念,对 类 class 有以下特点:
类与实例的属性
类对象创建可选择界说类属性,创建实例对象时,实例属性主动实验类的__init__方法初始化
实例对象主动继承相应的类属性(假如有),但实例属性优先级更高
实例方法,类方法,静态方法的参数
实例方法是一样平常函数但实例方法必要传入self参数(与一样平常函数的区别)
类方法和静态方法是通过装饰器实现的函数,类方法必要传入cls参数,静态方法无需传入self参数或者是cls参数(但也能传入参数)
此中self参数必须指向实例对象,cls参数指向界说的类对象(self与cls是约定俗成的,原则上可以用别的名字)
方法与函数
此中方法是在对象语境下的函数,实例调用实例方法即调用方法,类调用实例方法即调用函数
具体细节


类举例
  1. class Toy(object): # 此处此类可理解为设计一个Toy的蓝图
  2.   # 赋值定义类属性,记录所有玩具数量
  3.   count = 0
  4.   def __init__(self, name): # 用于实例初始化
  5.     self.name = name
  6.     # 类属性 +1
  7.     Toy.count += 1
  8.   @classmethod # 此装饰器表示是类方法,类方法无需创建实例对象即可调用,最为灵活
  9.   def show_toy_count(cls):
  10.     print('玩具对象的数量 %d' % cls.count, cls)
  11.   @staticmethod # 此装饰器表示是静态方法,静态方法本质上是封装在类对象内的的函数,常用于测试
  12.   def hi():
  13.     print('Hello!')
  14.   # 实例方法
  15.   def beybey(self):
  16.     print('Sad!', self)
  17. # 创建实例对象
  18. toy1 = Toy('乐高')
  19. toy1.hand = 2
  20. toy2 = Toy('泰迪熊')
  21. toy3 = Toy('哥斯拉')
  22. print(toy1.name, toy2.name, toy3.name)
  23. # 点语法调用类方法与静态方法,如:类名.方法
  24. Toy.show_toy_count()
  25. Toy.hi()
  26. # 实例对象调用类方法时,与类对象调用类方法无异,但实际上调用仍通过实例对象继承的类对象
  27. toy1.show_toy_count()
  28. print(toy1.hand)
  29. # 实例对象调用静态方法时,与类对象调用静态方法无异,但实际上调用仍通过实例对象继承的类对象
  30. toy2.hi()
  31. # 实例对象调用实例方法,Python的解释器内部,当我们调用toy3.beybey()时,实际上Python解释成Toy.beybey(toy3)
  32. toy3.beybey()
  33. # Toy.beybey() # 错误语法,self必须指向实例对象,此处实例方法指向类对象而不是实例对象
  34. Toy.beybey(toy3)
  35. # 类与其实例的类型和内存地址
  36. print(type(Toy), id(Toy), type(toy3), id(toy3))
复制代码
输出结果
  1. 乐高 泰迪熊 哥斯拉
  2. 玩具对象的数量 3 <class '__main__.Toy'>
  3. Hello!
  4. 玩具对象的数量 3 <class '__main__.Toy'>
  5. 2
  6. Hello!
  7. Sad! <__main__.Toy object at 0x000001FD9F794D60>
  8. Sad! <__main__.Toy object at 0x000001FD9F794D60>
  9. <class 'type'> 2188806599664 <class '__main__.Toy'> 2188813880672
复制代码
类方法与静态方法举例
  1. class Cat: # 或者class Cat()不写父对象形式定义类对象,会默认继承祖先object对象
  2.   name = '小敏'
  3.   @classmethod
  4.   def www(cls):
  5.     print('%s 干嘛!' % cls.name)
  6.     # cls.call() # 类方法可以调用静态方法
  7.   @staticmethod
  8.   def call():
  9.     print('喵喵~')
  10.     Cat.name = '小敏臭弟弟'
  11.     print(Cat.name)
  12.     # Cat.www() # 静态方法可以调用类方法
  13. Cat.www()
  14. Cat.call()
  15. # 没有定义实例方法可以创建实例对象继承并使用其中方法
  16. cat1 = Cat()
  17. cat1.www()
  18. cat1.call()
复制代码
输出结果
  1. 小敏 干嘛!
  2. 喵喵~
  3. 小敏臭弟弟
  4. 小敏臭弟弟 干嘛!
  5. 喵喵~
  6. 小敏臭弟弟
复制代码
先人对象中包罗的基本方法
  1. print(dir(object))
  2. ['__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__']
复制代码
总结


类 class 是 Python 中最核心的对象,界说类通常要写好类属性,实例方法,类方法,静态方法等几部份。把类和继承的类的实例比作函数中的主函数和子函数,那么类属性可以为是全局变量,实例属性可以为是局部变量;把类当作葫芦,实例方法则是方便我们照画瓢的同时,提供因地制宜的大概;类方式可以或许使我们更高效的使用类的功能而静态方法每每能帮助我们相识类的功能。
类 的各方法间并不是相互毫不干系,而是有着很强的共性,具体使用时应灵活运用,不应局限在抽象的界说之中。

到此这篇关于Python中类对象的文章就介绍到这了,更多相关Python类对象内容请搜刮草根技能分享从前的文章或继承浏览下面的相关文章盼望各人以后多多支持草根技能分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作