当前位置: 首页 > news >正文

python 类的特殊成员

上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下:

1. __doc__

  表示类的描述信息

class Foo:
    """ 描述类信息,这是用于看片的神奇 """
    def func(self):
        pass
print Foo.__doc__ #输出:类的描述信息

2.. __init__

  构造方法,通过类创建对象时,自动触发执行。

class Foo:
    def __init__(self, name):
        self.name = name
        self.age = 18

obj = Foo('wupeiqi') # 自动执行类中的 __init__ 方法

3. __call__

  对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
    def __init__(self):
        pass
    
    def __call__(self, *args, **kwargs):
        print '__call__'

obj = Foo() # 执行 __init__
obj()       # 执行 __call__

4. __dict__

  类或对象中的所有成员

上文中我们知道:类的普通字段属于对象;类中的静态字段和方法等属于类,即:

class Province:

    country = 'China'

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print 'func'

# 获取类的成员,即:静态字段、方法、
print Province.__dict__
# 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}

obj1 = Province('HeBei',10000)
print obj1.__dict__
# 获取 对象obj1 的成员
# 输出:{'count': 10000, 'name': 'HeBei'}

obj2 = Province('HeNan', 3888)
print obj2.__dict__
# 获取 对象obj1 的成员
# 输出:{'count': 3888, 'name': 'HeNan'}
print obj2.__dict__['name']
# 输出:HeNan

5. __str__

  如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

class Foo:
    def __str__(self):
        return 'wupeiqi'

obj = Foo()
print obj
# 输出:wupeiqi

 

转载于:https://www.cnblogs.com/alamZ/p/7054632.html

相关文章:

  • 修改敏感字
  • Java内部类
  • $.ajax中的eval及dataType
  • https 安全验证问题
  • 平安科技移动开发二队技术周报(第八期)
  • ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
  • codevs 2074 营救 WW
  • 范式1F2F3F
  • 品牌管理之万变与不变——From 品牌管理培训
  • Nginx(四)-- 配置文件之location
  • 自定义View中的Path
  • PHP 从数组中删除指定元素
  • Hadoop 尝试
  • jQuery淡入淡出的轮播图
  • VMware® Workstation 12 Pro Linux Ubuntu 中subversion的服务器搭建
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Invalidate和postInvalidate的区别
  • Java 网络编程(2):UDP 的使用
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js数组之filter
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP的Ev教程三(Periodic watcher)
  • Python学习之路16-使用API
  • SpingCloudBus整合RabbitMQ
  • Spring-boot 启动时碰到的错误
  • Vue.js 移动端适配之 vw 解决方案
  • 半理解系列--Promise的进化史
  • 回顾2016
  • 实现简单的正则表达式引擎
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 听说你叫Java(二)–Servlet请求
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​MySQL主从复制一致性检测
  • #stm32整理(一)flash读写
  • (10)ATF MMU转换表
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (bean配置类的注解开发)学习Spring的第十三天
  • (第61天)多租户架构(CDB/PDB)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)linux使用docker容器运行mysql
  • (二)springcloud实战之config配置中心
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ***测试-HTTP方法
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Micro Framework初体验(二)
  • .NET 读取 JSON格式的数据
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET6 命令行启动及发布单个Exe文件
  • .NET中winform传递参数至Url并获得返回值或文件
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)