python 之属性_零基础学习 Python 之类属性

写在之前

大家好,这是首发在我公众号「Python空间」的第 41 篇文章,欢迎关注,期待和你的交流。

如果你看过昨天(写个“类”就是这么 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 "", line 1, in 

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__': , '__weakref__': , '__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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值