`

python class属性

 
阅读更多

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

>>> class Class1(object):
    """Class1 Doc."""
    def __init__(self):
        self.i = 1234

>>> Class1.__doc__ # 类型帮助信息
'Class1 Doc.'
>>> Class1.__name__ # 类型名称
'Class1'
>>> Class1.__module__ # 类型所在模块
'__main__'
>>> Class1.__bases__ # 类型所继承的基类
(<type 'object'>,)
>>> Class1.__dict__ # 类型字典,存储所有类型成员信息。
<dictproxy object at 0x00D3AD70>
>>> Class1().__class__ # 类型
<class '__main__.Class1'>
>>> 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__': <function __init__ at 0x00D39470>}
>>> 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类属性及子类用法。分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print foo.x#通过实例访问类属性 &gt;&gt;&gt;1.5 print Foo.x #通过类访问类属性...

    对python 中class与变量的使用方法详解

    今天小编就为大家分享一篇对python 中class与变量的使用方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Python 类属性与实例属性,类对象与实例对象用法分析

    本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法。分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容python2.x class Tool...

    浅谈python类属性的访问、设置和删除方法

    类属性和对象属性 ...类属性和对象属性可类比于Java中的static成员和非static成员,只不python中的类属性和对象属性都是可以动态添加(和删除)的。 class A(object): name='orisun' def __init__(self)

    Python对象属性自动更新操作示例

    本文实例讲述了Python对象属性自动更新操作。分享给大家供大家参考,具体如下: 在软件设计中会遇到这样的问题:有些属性之间有相互关联。这样,其中的一个属性变化的时候其他的属性也应该跟随变化。 先看一段示例...

    Python类及获取对象属性方法解析

    1.类外面添加对象属性 class Washer(): def wash(self): print('do some laundry stuff') haier1 = Washer() #添加属性,对象名、属性名 = 值 haier1.width = 400 haier1.height = 500 对象属性既可以在类外面...

    Python高级property属性用法实例分析

    本文实例讲述了Python高级property属性用法。分享给大家供大家参考,具体如下: property属性 1.property属性: 是一个提高开发者用户体验度的属性,可以将一个函数改造的像属性一样。 例: # 定义的时候像是一个...

    Python类属性,类方法,静态方法解释,及实际演练

    类属性:python中一切皆为对象,首先要明白两个概念类对象和实例对象。 class Tool(object): count = 0 def __init__(self,name): self.name = name # 让类属性的值+1 Tool.count += 1 print(id(Tool("锤子")))...

    Python 私有属性和私有方法应用场景分析

    Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。 class Test(object): __count = 0 # 私有属性 __count def get_...

    Python类属性与实例属性用法分析

    本文实例分析了Python类属性与实例属性用法。分享给大家供大家参考。具体如下: 类属性:类名.属性名  实例属性:实例.属性名 &gt;&gt;&gt; class test(): ... ver=1 ... &gt;&gt;&gt; a=test() &gt;&gt;&gt; test.x=8 &gt;&gt;&gt; a.__dict__ {} &gt;&gt;&gt; ...

    Python 类的魔法属性用法实例分析

    本文实例讲述了Python 类的魔法属性用法。分享给大家供大家参考,具体如下: 魔法属性 无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下: 1. doc 表示类...

    Python属性和内建属性实例解析

    这篇文章主要介绍了Python属性和内建属性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 私有属性添加getter和setter方法 class Money(object): ...

    python私有属性和方法实例分析

    本文实例分析了python的私有属性和方法。分享给大家供大家参考。具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只...

    python中类的属性和方法介绍

    Python-类属性,实例属性,类方法,静态方法,实例方法 类属性和实例属性 #coding:utf-8 class Student(object): name = 'I am a class variable' #类变量 &gt;&gt;&gt; s = Student() # 创建实例s &gt;&gt;&gt; print(s.name) # ...

    Python学习笔记_9:class 类定义的属性与方法——详解

    对很多没有其他语言基础的初学者来说,可能学到 python 的类定义的时候会苦恼很久 但,无论我们遇到什么困难,也不要怕,微笑着面对他,消除恐惧的最好办法就是面对恐惧,坚持,才是胜利,加油,奥利给!!! 今天...

    Python面向对象之类和对象实例详解

    class Turtle:#python 中类名约定以大写字母开头 '''关于类的简单例子。。。''' #属性 == 类变量 color ="green" weight="10kg" legs=4 shell=True mouth='big' #方法 def climb(self):

    python基础训练题-类和方法的概念和实例 类(Class):用来描述具有相同的属性和方法的对象的集合

    类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 方法:类中定义的函数。 类的构造方法__init__():类有一个名为 init() 的特殊方法(构造...

    对python 调用类属性的方法详解

    测试时候类的调用是经常会用到的。...from all_python_learn.class_and_funcation.class_learn import * b = Learn(1,2) b.get() print(Learn.a) 这里通过from导入了模块class_learn里的类,然后通过类的实例化

    Python面向对象特殊属性及方法解析

    Python中对象包括很多双下划綫开始和结束的属性,这些特殊属性,有特殊用法。 特殊方法 含义 obj.__dict__ 对象的属性字典 obj.__class__ 对象所处的类 class.__bases__ 类的基本元组(多继承) class.__...

    通过实例了解python property属性

    这篇文章主要介绍了通过实例了解python property属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 什么是property属性 一种用起来像是使用的实例属性...

Global site tag (gtag.js) - Google Analytics