首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学习 Python 之类属性

零基础学习 Python 之类属性

作者头像
编程文青李狗蛋
发布2019-11-07 15:38:19
2300
发布2019-11-07 15:38:19
举报
写在之前

如果你看过昨天(写个“类”就是这么 so easy)和前天(我与 “类” 的初次相见)的文章相信你已经对 “类” 有了一些基本的认识,为了能给之后的编程打个稍微牢固的基础,我们要深入到一些细节部分中去。今天我们来看类的属性。

类属性

首先我们在交互模式下先创建一个简单的类:

>>> class A():
...     x = 1
...

上面的 A() 类中的代码没有任何方法,只有 x = 1,当然如果你乐意的话,你可以写任何东西。先不管为什么,我们继续在交互模式下敲下面的代码:

>>> A.x
1

A 是刚刚建立的类的名字,x 是类中的一个变量,它引用的对象是整数 1。通过 A.x 的方式就能得到整数 1,。像这样的,类中的 x 被称为类的属性,而 1 是这个属性的值,A.x 是调用类属性的方式。

我们在这里谈到了 “属性”,请不要忽视这个词,在很多的领域都有它的身影。

下面我们回到之前 A 类的那个例子上。如果要调用类的某个属性,其方法是用英文的句号,就如我们例子中的 A.x。类的属性仅仅与其所定义的类绑定,并且这种属性本质上就是类里的变量。它的值不依赖任何的实例,只是由类中所写的变量赋值语句确定。所以类的属性还有另外一个名字 -- 静态变量

我在前面的文章中说过很多次,在 Python 中 “万物皆对象”,类当然也不例外,它也是对象,凡是对象都具有属性和方法,而属性是可以增加删除和修改的。既然如此,那么对于之前的类 A,都可以对其目前所拥有的属性进行修改,也可以增加新的属性。

>>> A.y = 2
>>> A.y
2

上述代码给类 A 增加了一个新的属性 y,并赋值为 2。

>>> del A.x
>>> A.x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute 'x'

上述代码删除了一个已有的属性 x,A.x 属性被删除后,如果再调用,就会出现异常。A.y 依然存在,我们可以修改 y 这个类的属性的值:

>>> A.y = 10000
>>> A.y
10000

y 是我们在 A 类中自己定义的属性,其实在一个类建立的同时,Python 也让这些类具有了一些默认的属性,可以用我们熟悉的 dir() 来查看类的所有属性,当然也包括方法:

>>> dir(A)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'y']

我们仔细观察上面的结果,可以发现一个特殊的属性 __dict__,之所以用“特殊” 这个词来修饰,是因为它也是以双下划线开头和结尾的,类似于昨天文章中我们所见的 __init__()。在类里面,凡事以双下划线开头和结尾命名的属性和方法,我们都称它们为“特殊**”。

>>> A.__dict__
mappingproxy({'__module__': '__main__', 'y': 10000, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None})

下面我再说几种类的特殊属性的含义:

1.A.__name__:以字符串的形式返回类的名字,需要注意的是这时候得到的仅仅是一个字符串,而不是一个类对象。

2.A.__doc__:显示类的文档。

3.A.__base__:类 A 的所有父类。如果是按照上面方式定义的类,应该显示 object,因为以上所有的类都继承了它。等到学习了“继承”,再来看这个属性,内容就丰富了。

4.A.__dict__:以字典形式显示类的所有属性。

5.A.__module__:类所在的模块。

这里稍微解释一下 A.__module__,我们对类 A 做如下操作:

>>> A.__module__
'__main__'

说明这个类所描述的模块是 __mian()__。

最后让我们来对类的属性进行一个总结:

1.类属性跟类绑定,可以自定义,删除,修改值,也可以随时增加类属性。

2.每个类都有一些特殊属性,通常情况下特殊属性是不需要修改的,虽然有的特殊属性可以修改,比如 A.__doc__。

对于类,除了属性,还有方法。但是类中的方法,因为牵扯到实例,所以我们还是通过研究实例来理解类中的方法。

写在最后

类的属性到这就结束了,明天我们来看创建类的实例,创建实例并不是困难的事情,只需要通过调用类就能实现。

这些东西都很基础,但是往往最基础的东西也是最容易被忽略的,所以我希望在看文章的你可以耐得住性子,真的去学习。

The end。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python空间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档