- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章简述 Python 的类和对象由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向“对象”编程这类段子,而面向对象编程的语言都会有三大特征:封装、继承、多态.
我们平时接触到的很多函数、方法的操作都具有这些性质,我们只是会用,但还没有去深入了解它的本质,下面就介绍一下关于类和对象的相关知识.
封装 。
封装这个概念应该并不陌生,比如我们把一些数据封装成一个列表,这就属于数据封装,我们也可以将一些代码语句封装成一个函数方便调用,这就是代码的封装,我们也可以将数据和代码封装在一起。用术语表示的话,就是可以将属性和方法进行封装,从而得到对象.
首先我们可以定义一个类,这个类中有属性和方法,但有的伙伴会比较好奇,属性和方法不是会封装成对象嘛,为什么又变成类了?举个例子,类就好比是一个毛坯房,而对象是在毛坯房的基础上改造成的精装房.
1
2
3
4
5
6
7
8
9
10
|
class
XiaoMing:
#属性
height
=
180
weight
=
65
sex
=
'男'
#方法
def
run(
self
):
print
(
'小明在跑步'
)
def
sleep(
self
):
print
(
'小明在睡觉'
)
|
在类定义完成时就创建了一个类对象,它是对类定义创建的命名空间进行了一个包装。类对象支持两种操作:属性引用和实例化.
属性引用的语法就是一般的标准语法:obj.name。比如XiaoMing.height和XiaoMing.run就是属性引用,前者会返回一条数据,而后者会返回一个方法对象.
1
2
3
4
5
|
In[
1
]:
print
(XiaoMing.height)
Out[
1
]:
180
In[
2
]:
print
(XiaoMing.run)
Out[
2
]:<function XiaoMing.run at
0x0000021C6239D0D0
>
|
这里也支持对类属性进行赋值操作,比如为类中的weight属性赋予一个新值.
1
2
3
4
5
6
|
In[
3
]:
print
(XiaoMing.weight)
Out[
3
]:
65
In[
4
]:XiaoMing.weight
=
100
In[
5
]:
print
(XiaoMing.weight)
Out[
5
]:
100
|
而类的实例化可以将类对象看作成一个无参函数的赋值给一个局部变量,如下:
1
|
In[
6
]:ming
=
XiaoMing()
|
ming就是由类对象实例化后创建的一个实例对象,通过实例对象也可以调用类中的属性和方法.
1
2
3
4
5
6
7
8
|
In[
7
]:ming.run()
Out[
7
]:小明在跑步
In[
8
]:
print
(xiaoming.height)
Out[
8
]:
180
#通过向类对象调用方法返回的方法对象中传入实例对象也可以达到同样效果
In[
11
]:XiaoMing.run(ming)
Out[
11
]:小明在跑步
|
魔法方法__init__ 。
类在实例化过程中并不都是像上面例子一样简单的,一般类都会倾向将实例对象创建为有初始状态的,所以在类中可能会定义一个__init__的魔法方法,这个方法就可以帮助接收、传入参数.
而一个类如果定义了__init__方法,那么在类对象实例化的过程中就会自动为新创建的实例化对象调用__init__方法,请看下面这个例子.
1
2
3
4
5
6
|
class
Coordinates:
def
__init__(
self
,x,y):
self
.x
=
x
self
.y
=
y
def
print_coor(
self
):
print
(
'当前坐标为(%s,%s)'
%
(
self
.x,
self
.y))
|
可以看到在__init__()中传入了参数x和y,然后在print_coor中需要接收参数x和y,接下来通过实例化这个类对象,验证一下参数是否能通过__init__()传递到类的实例化操作中.
1
2
3
4
|
In[
9
]:coor
=
Coordinates(
5
,
3
)
In[
10
]:coor.print_coor()
Out[
10
]:当前坐标为(
5
,
3
)
|
继承 。
所谓继承就是一个新类在另一个类的基础上构建而成,这个新类被称作子类或者派生类,而另一个类被称作父类、基类或者超类,而子类会继承父类中已有的一些属性和方法.
1
2
3
4
5
6
|
class
Mylist(
list
):
pass
list_
=
Mylist()
list_.append(
1
)
print
(list_)
''' [1] '''
|
比如上面这个例子,我并没有将list_定义成一个列表,但它却能调用append方法。原因是类Mylist继承于list这个基类,而list_又是Mylist的一个实例化对象,所以list_也会拥有父类list拥有的方法.
当然可以通过自定义类的形式实现两个类之间的继承关系,我们定义Parent和Child两个类,Child中没有任何属性和方法,只是继承于父类Parent.
1
2
3
4
5
6
7
8
9
10
|
class
Parent:
def
par(
self
):
print
(
'父类方法'
)
class
Child(Parent):
pass
child
=
Child()
child.par()
'''
父类方法
'''
|
覆盖 。
当子类中定义了与父类中同名的方法或者属性,则会自动覆盖父类对应的方法或属性,还是用上面这个例子实现一下,方便理解.
1
2
3
4
5
6
7
8
9
10
11
|
class
Parent:
def
par(
self
):
print
(
'父类方法'
)
class
Child(Parent):
def
par(
self
):
print
(
'子类方法'
)
child
=
Child()
child.par()
'''
子类方法
'''
|
可以看到子类Child中多了一个和父类Parent同名的方法,再实例化子类并调用这个方法时,最后调用的是子类中的方法。 Python中继承也允许多重继承,也就是说一个子类可以继承多个父类中的属性和方法,但是这类操作会导致代码混乱,所以大多数情况下不推荐使用,这里就不过多介绍了.
多态 。
多态比较简单,比如定义两个类,这两个类没有任何关系,只是两个类中有同名的方法,而当两个类的实例对象分别调用这个方法时,不同类的实例对象调用的方法也是不同的.
1
2
3
4
5
6
|
class
XiaoMing:
def
introduce(
self
):
print
(
"我是小明"
)
class
XiaoHong:
def
introduce(
self
):
print
(
"我是小红"
)
|
上面这两个类中都有introduce方法,我们可以实例化一下两个类,利用实例对象调用这个方法实现一下多态.
1
2
3
4
5
6
7
8
|
In[
12
]:ming
=
XiaoMing()
In[
13
]:hong
=
XiaoHong()
In[
14
]:ming.introduce()
Out[
14
]:我是小明
In[
15
]:hong.introduce()
Out[
15
]:我是小红
|
常用BIF 。
1、issubclass(class,classinfo) 。
判断一个类是否是另一个类的子类,如果是则返回True,反之则返回False.
1
2
3
4
5
6
7
8
|
class
Parent:
pass
class
Child(Parent):
pass
print
(
issubclass
(Child,Parent))
'''
True
'''
|
需要注意的有两点:
1
2
3
4
|
print
(
issubclass
(Parent,Parent))
'''
True
'''
|
2、isinstance(object,classinfo) 。
判断一个对象是否为一个类的实例对象,如果是则返回True,反之则返回False.
1
2
3
4
5
6
7
8
9
10
|
class
Parent:
pass
class
Child:
pass
p
=
Parent()
c
=
Child()
print
(
isinstance
(p,Parent,Child))
#True
print
(
isinstance
(c,Parent))
#False
|
需要注意的有两点:
3、hasattr(object,name) 。
判断一个实例对象中是否包含一个属性,如果是则返回True,反之则返回False.
1
2
3
4
5
6
7
|
class
Parent:
height
=
100
p
=
Parent()
print
(
hasattr
(p,
'height'
))
'''
True
'''
|
需要注意的是第二个参数name必须为字符串形式传入,如果不是则会返回False.
以上就是简述 Python 的类和对象的详细内容,更多关于Python 的类和对象的资料请关注我其它相关文章! 。
原文链接:https://mp.weixin.qq.com/s?__biz=MzA5OTIzNjE1NA==&mid=2247488172&idx=1&sn=9d32497231a26d8357a6d69e6c62cb36&utm_source=tuicool&utm_medium=referral 。
最后此篇关于简述 Python 的类和对象的文章就讲到这里了,如果你想了解更多关于简述 Python 的类和对象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
做数据分析、科学计算等离不开工具、语言的使用,目前最流行的数据语言,无非是MATLAB,R语言,Python这三种语言,但今天小编简单总结了python语言的一些特点及平常使用的工具等。 为
服务器和应用程序日志记录是开发人员、运维人员和安全团队了解应用程序在其生产环境中运行状态的重要工具。 日志记录使运维人员能够确定应用程序和所需组件是否运行平稳,并检测是否发生了异常情况,以便他们能
了解程序集如何在C#.NET中加载 我们一直在处理库和NuGet软件包。不管是好是坏,高级.NET开发人员都需要了解.NET运行时如何加载程序集。 这些库依赖于其他流行的库,并且有很多共享的
目录 Java注解(annotation)简单上手 1、什么是注解? 2、java内置注解 3、注解的基本运 总结 Java注解(a
系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向“对象”编程这类
tf.reverse_sequence()简述 在看bidirectional_dynamic_rnn()的源码的时候,看到了代码中有调用 reverse_sequence()这一方法,于是又回去
目录 (一)hog特征提取 (二)dlib库 (三)卷积神经网络特征提取(cnn) 人脸图像特征提取方法
代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... 【提示】本例通过
我是一名优秀的程序员,十分优秀!