从0.1开始学Python——[17]

之前我们学习了对象(object),即内存中专门用来储存数据的一块区域。面向对象(OOP),意思是所有操作都是围绕或者说通过对象完成的,而Python中“一切皆对象”,因此Python是一门面向对象的编程语言。和面向对象相对,另一种编程语言叫面向过程的编程语言,即将程序的逻辑分解为步骤,然后对步骤的抽象来完成程序。
面向过程编程的逻辑比较直接,就和我们想问题差不多,但是却有比较不方便的地方。面向过程的弊端在于,每个程序都是由一个个步骤组成的,而这些步骤只为一个功能实现,那只要其他功能和这个功能有一点点不同,即便是有一两个步骤不一样,这样也不能通用,也就是说它的可复用性比较低。适合只用一两次的功能。
面向对象编程的主要关注点是对象,而不是过程。说白了就是功能存入对象,该啥时候用啥时候用就行,这大概就是面向对象的中心思想。和面向过程相比,可以看作每一些步骤就属于一个对象,当需要完成的功能是几个对象的功能拼凑起来的时候,就使用这几个对象就行了,来回嵌套或拼接即可。写对象比较麻烦,但是复用性强。而且改对象的效果直接可以同时对所有用到该对象的东地方生效,所以也易于维护。面向对象编程的步骤可以概括为:找到对应对象->使用对象的功能。

除了Python内置的对象之外,我们写程序也非常需要一些自定义的对象帮我们实现更复杂或特等的功能,所以才有自定义对象这种东西。类(class),更像是图纸一样,这个东西是创建对象的蓝本,是创建对象依据,描绘了对象的“宏观样子”。这种相对关系之下,对象也可以说是类的实例(instance)。要注意的是,一个类可以创建很多不同的对象,但是这些对象属于同一类,就像字符串,写成什么样都有可能,但是都是字符串;就像大家都是人,但是都长得不一样(当然也有贼像的,但是不完全一样)。 不过注意,自定义的类都需要大写字母开头,这和内置的就不一样。用class定义类的语法和函数类似,但不一样,具体为:
class 类名([父类]可不写):
(缩进)代码块

调用类的方式和调用函数比较相似,只不过一般都把调用类的指令赋值给一个变量,因为你创建类的目的就是创建这个类的变量

class Jntm():
    pass

print(Jntm)
kk = Jntm()
print(kk)
print(type(kk))
<class '__main__.Jntm'>
<__main__.jntm object at 0x000002D594DE94C8>
<class '__main__.Jntm'>

可以看到,上面是我们创建的类,而下面就变成了对象,而这个对象就属于类Jntm。

isinstance()函数

这个函数是用来检测某对象是否属于某类的,输入参数是isinstance(对象,类名),返回值是布尔值True或False。

r = isinstance(kk,Jntm)
r1 = isinstance(kk,int)

print(r)
print(r1)
True
False

类的本质

本质上来讲,类是对象,是一个用来创建对象的对象。类的类型就是type,也就是说定义一个类就是定义了一个type类的对象。

print(type(10))
print(type(Jntm))
<class 'int'>
<class 'type'>

用类创建对象的流程

变量的类型和创建他的一致,注意不是和类的类型一致是和类一致,因为所有类的类型都是type,但是对象的类型很丰富。

print(type(10))
print(type(int))
<class 'int'>
<class 'type'>

创建变量10的类就是int,而不是int的类型是int,int类的类型是type。用类创建对象的流程可以简单概括为:创建一个变量;在内存中创建一个新对象;将对象的id赋值给变量。在上面创建的对象kk,就是一个被赋予唯一id,类型为Jntm,而值是空(注意不是None)的变量。由于值是空的,所以现在kk是一个空对象,但是又不会写类的内容,那么在充实类的内容之前,我们可以先在对象里面添加变量,或者说在这个变量里面添加变量,这个添加进去的对象叫属性。基本语法是:对象.属性名=属性值。效果是改变对象里面值(value)的内容。

kk.skill = '唱跳rap篮球'
print(kk.skill)
唱跳rap篮球

这个时候相当于kk对象的value里面多了一个skill='唱跳rap篮球’的内容,注意**skill=‘唱跳rap篮球’**是完整内容,而不是只有’唱跳rap篮球’是。当然,如果Jntm类创建了一堆对象,也只有这个kk里面有这个内容,其他的不添加是没有的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值