欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python class属性

发布时间:2025/4/14 python 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 Fielddef __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 = 123def __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 = 123def __init__(self):self.__x = 0def __test(self):print id(self)事实上这只是一种规则,并不是编译器上的限制。我们依然可以用特殊的语法来访问私有成员。 >>> Class1._Class1__i 123 >>> a = Class1() >>> a._Class1__x 0 >>> a._Class1__test() 13860376 -----------------------除了静态(类型)字段,我们还可以定义静态方法。 >>> class Class1:@staticmethoddef test():print "static method" >>> Class1.test() static method

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

>>> class Class1:def __init__(self):self.i = 0def __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属性的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。