Class 有一些特殊的属性,便于我们获得一些额外的信息。

>>> class Class1(object):

"""Class1 Doc."""

def __init__(self):

self.i = 1234

>>> Class1.__doc__ # 类型帮助信息

'Class1 Doc.'

>>> Class1.__name__ # 类型名称

'Class1'

>>> Class1.__module__ # 类型所在模块

'__main__'

>>> Class1.__bases__ # 类型所继承的基类

(,)

>>> Class1.__dict__ # 类型字典,存储所有类型成员信息。

>>> Class1().__class__ # 类型

>>> Class1().__module__ # 实例类型所在模块

'__main__'

>>> Class1().__dict__ # 对象字典,存储所有实例成员信息。

{'i': 1234}

成员Python Class 同样包含类型和实例两种成员。

>>> class Class1:

i = 123 # Class Field

def __init__(self):

self.i = 12345 # Instance Field

>>> print Class1.i

123

>>> print Class1().i

12345

两个比较重要的取实例属性的函数:

getattr(实例,属性名),hasattr(实例,属性名)判断属性名是否属于实例。

如上例:s='i',getattr(Class1(),s)=12345

hasattr(Class1(),s)=True

-----------------------

有几个很 "特殊" 的 "规则" 需要注意。

(1) 我们可以通过实例引用访问类型成员。因此下面的例子中 self.i 实际指向 Class1.i,直到我们为实例新增了一个成员 i。

>>> class Class1:

i = 123

def __init__(self):

print self.i

print hex(id(self.i))

>>> hex(id(Class1.i)) # 显示 Class1.i

'0xab57a0'

>>> a = Class1() # 创建 Class1 实例,我们会发现 self.i 实际指向 Class1.i。

123

0xab57a0

>>> Class1.__dict__ # 显示 Class1 成员

{'i': 123, '__module__': '__main__', '__doc__': None, '__init__': }

>>> a.__dict__ # 显示实例成员

{}

>>> a.i = 123456789 # 为实例新增一个成员 i

>>> hex(id(a.i)) # 显示新增实例成员地址

'0xbbb674'

>>> a.__dict__ # 显示实例成员

{'i': 123456789}

我们可以在成员名称前添加 "__" 使其成为私有成员。

>>> class Class1:

__i = 123

def __init__(self):

self.__x = 0

def __test(self):

print id(self)

事实上这只是一种规则,并不是编译器上的限制。我们依然可以用特殊的语法来访问私有成员。

>>> Class1._Class1__i

123

>>> a = Class1()

>>> a._Class1__x

0

>>> a._Class1__test()

13860376

-----------------------

除了静态(类型)字段,我们还可以定义静态方法。

>>> class Class1:

@staticmethod

def test():

print "static method"

>>> Class1.test()

static method

重载

Python 支持一些特殊方法和运算符重载。

>>> class Class1:

def __init__(self):

self.i = 0

def __str__(self):

return "id=%i" % id(self)

def __add__(self, other):

return self.i + other.i

>>> a = Class1()

>>> a.i = 10

>>> str(a)

'id=13876120'

>>> b = Class1()

>>> b.i = 20

>>> a + b

30

通过重载 "__eq__",我们可以改变 "==" 运算符的行为。

>>> class Class1:

pass

>>> a = Class1()

>>> b = Class1()

>>> a == b

False

>>> class Class1:

def __eq__(self, x):

return 55

>>> a = Class1()

>>> b = Class1()

>>> a == b

55

python class 属性是什么_python class 的属性相关推荐

  1. python中的类属性和类方法_python面向对象之类属性和类方法的使用和实例

    类属性和类方法 目标 类的结构类属性和实例属性类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 1. 使用面相对象开发,第 1 步 是设计 类 2. 使用 类名() 创建对象,创建对象 的 ...

  2. python属性使用教程_Python对象的属性访问过程详解

    只想回答一个问题: 当编译器要读取obj.field时, 发生了什么? 看似简单的属性访问, 其过程还蛮曲折的. 总共有以下几个step: 1. 如果obj 本身(一个instance )有这个属性, ...

  3. python查看类的属性和方法_python—类的属性和方法总结

    一.类的属性总结(类的属性定义在方法外,对象的属性定义在方法内) 理解: 类的(静态)属性:(人类的五官,理解为变量) 类的(动态)方法:(人类吃穿住行,理解为一个函数,至少带一个参数self,指向类 ...

  4. python私有属性怎么定义_Python中私有属性的定义方式

    Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): ...

  5. python对大量数据去重_Python对多属性的重复数据去重实例

    python中的pandas模块中对重复数据去重步骤: 1)利用DataFrame中的duplicated方法返回一个布尔型的Series,显示各行是否有重复行,没有重复行显示为FALSE,有重复行显 ...

  6. python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...

    类属性可以直接在方法中赋值,但 一.调用该属性时,必须先调用该方法: 二.与 init 方法区别是,init方法只初始化一次,初始化完成后作为全局变量.在方法中赋值属性,每次调用该方法,该属性初始化一 ...

  7. python中type(12.34)_Python typing.TYPE_CHECKING属性代码示例

    本文整理汇总了Python中typing.TYPE_CHECKING属性的典型用法代码示例.如果您正苦于以下问题:Python typing.TYPE_CHECKING属性的具体用法?Python t ...

  8. python的类属性和方法_Python 类的属性和方法

    本文介绍Python类中的属性和方法.和大部分语言类似,Python中的属性和方法也公有(public)和私有(private) 的区分. 一.类的公有和私有属性: 在Python中一般定义的属性为公 ...

  9. python之穿越火线游戏代码_Python win32con.CF_UNICODETEXT属性代码示例

    # 需要导入模块: import win32con [as 别名] # 或者: from win32con import CF_UNICODETEXT [as 别名] def TestText(): ...

最新文章

  1. iOS 最新发布App Store流程
  2. 【HTTP】之HTTP 错误 401.3 - 访问被资源 ACL 拒绝
  3. [Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]
  4. 华为交换机telnet和ftp服务开启/关闭命令
  5. Django中@login_required用法简介
  6. python竖着输出_Python中三种格式化输出的方式
  7. linux ftell函数(用于得到文件位置指针当前位置相对于文件首的偏移字节数)计算文件的字节大小
  8. SQL Server2008安装详细教程
  9. 小米6连接WIFI后无法联网,线刷教程
  10. 南科大副教授“跳槽”到深圳中学引热议!大学老师不香了吗?
  11. 故障诊断——奇异值分解法hankel矩阵
  12. 【云原生 | Docker 基础篇】03、Docker 阿里云镜像加速器
  13. BUUCTF 从娃娃抓起
  14. ini文件全部写入时换行符号未写入的问题处理
  15. Python练习题1.变量类型练习 华氏温度转摄氏温度 圆面积周长计算 判断闰年
  16. python27和python36 共存时安装pip方法,解决python27文件夹下没有script文件方法
  17. 图论基础 —— 概述
  18. 建筑承包模式EPC与PEC
  19. 最新封神总结!蚂蚁金服 + 滴滴 + 美团 + 拼多多 + 腾讯 55 万字 Java 中高级面试题,这还不拿捏大厂面试?拿高薪!!
  20. python气象处理第三弹-绘制气象站点分布

热门文章

  1. java方法体逻辑不会写怎么办,想自己写框架?不会写Java注解可不行
  2. 将两个有序链表合并,合并后仍然有序
  3. spring boot 开发 提交form表单出错
  4. bzoj 1010: [HNOI2008]玩具装箱toy 2011-12-27
  5. SharePoint 2013/2010 中的日历重合 (Calendars Overlay)
  6. 直线矩阵数学之路(2)-四大神器-R(18)
  7. C#解析XML各种方法特点比较(转载)
  8. ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法)
  9. ADO.NET中异步处理的方式
  10. UA MATH565C 随机微分方程V 无穷小生成算子