p语言是python吗-Python是纯的面向对象语言吗?

不可否认的是,Python是面向对象的语言,但它是纯的面向对象语言吗?为什么会提出这个问题呢?原因是今天遇到了一个问题,但经过了几个小时的调研,期间也曾经询问过其他人,但得到了错误的答案,还好自己一直没有放弃,最终找到了正确的答案(Practice makes perfect)。

这个问题是什么呢?

dir(1)

['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delat

tr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__forma

t__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__',

'__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul

__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow

__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_

ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ro

r__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rx

or__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '_

_truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', '

imag', 'numerator', 'real']

显而易见的是,对于1而言,它是包含class属性的。但是,如果执行的是1.class,却会报错,结果如下图所示:

8b8afde57a7e

错误

之所以报错,其实是因为对于Python来说,会将1.class解析成1.(浮点数)和class(标识符),而这两者之间缺少操作符,所以会报错。

正确的写法是

(1).__class__

8b8afde57a7e

正确截图

研究发现,在Python中一切数据都是对象(这点胜于Java等OO语言),但是它并不是一门纯的面向对象语言。为什么说它不是一门纯的面向对象语言呢?是因为Python并不支持面向对象的第一大特性:封装,demo如下所示。

class C(object):

def m(self):

self.a = 1

self.__a = 2

c = C()

c.m()

print c.a

print c.__a #

print c._C__a

如果此时执行,运行结果如下所示:

8b8afde57a7e

image.png

但如果我们讲c.__a注释起来,运行结果如下所示:

8b8afde57a7e

image.png

所以,Python并不是纯的面向对象语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值