开发者社区> 任平生78> 正文

初识python中的类与对象

简介: 类的概念与定义 在生活中,我们走在路边,看到一辆车,大脑中首先想到的是“这是一辆车, 然后才是这是一辆什么牌子的车”,在这里,我们就用到了编程中的类的概念。 同样的,看到一条小狗,也会先想到这是一条狗,然后会想到这是一条什么品种的狗。
+关注继续查看

类的概念与定义

在生活中,我们走在路边,看到一辆车,大脑中首先想到的是“这是一辆车,
然后才是这是一辆什么牌子的车”,在这里,我们就用到了编程中的类的概念。
同样的,看到一条小狗,也会先想到这是一条狗,然后会想到这是一条什么品种的狗。

在编程中,把同一类的事物叫做类,把这个类里所共有的特征总结归纳并定义出来,就是类的属性;
把这个类能会做什么事,能做什么事总结归纳并定义出来就是类的技能。
举个例子:

我想定义一个人的类,在python里面要怎么实现呢,
首先,我们会想到人都有什么共同的特征呢?人都有两只眼睛,都有两条腿,等等这些是每个人都有的自己的特征,
其次,每个人还都拥有自己的独有特征,每个人的姓名都不是一样的,每个人还都有自己的年龄,自己的性别,自己的学历等等这些是每个人的独有特征
最后,人都有的技能还包括吃饭,睡觉,行走,学习等,这些是人都具有的技能

那个现在我们这可以定义人的类,具体实现代码如下:

class Person:
    """class是定义类的关键字,class后面的P erson是类的名字,python解释器会把class这个关键字后面的名称设定为类的名字,类的名字默认首字母大写。"""
    #定义每个人都有两个眼睛
    eye=2
    #定义每个人都有两条腿
    leg=2
    def __init__(self,name,age,sex,education):
        """定义每个人的独有的特征,此处定义每个人都有自己的姓名,年龄,性别和学历"""
        self.name=name
        self.age=age
        self.sex=sex
        self.education=education
    def eat(self):
        #定义人都有的吃饭的技能
        print("%s is eating food"%self.name)
        
    def walk(self):
        #定义人都有的行走的技能
        print("%s is walking slow"%self.name)
        
    def study(self):
        #定义人都有的学习的技能
        print("%s is studying hard"%self.name)  

执行上面的代码,python解释器会在内存中开辟出一块内存空间,用来保存类中定义的人类的特征和技能

在上面的代码里,定义人类共有的特征时,相当于在人这个类的名称空间中定义了两个变量,定义人独有的特征时,相
当于是在人类的名称空间里,声明了一个名叫“初始化”的函数,在函数中存放代表了每个人独有的特征的变量

而接下来的三个函数则用来表示每个人都会做的动作,python解释器同样会为这三个函数在存放人类的名称空间的内存中开辟三块区域用来存放这三个函数(也可以称之为人类共有的技能

对象的概念与定义

在编程的世界里,定义出一个类之后,我们就可以用这个类生成一个个的人,这个过程我们也称之为类的实例化,生成之后的人我们则称之为对象。

现在我想用上面的程序实例化出两个人,要怎样实现呢??

person1=Person("jack",22,"male","college")
person2=Person("lily",18,"female","middle school")

这样我们就实例化出两个人:

第一个人名字叫jack,22岁,性别为男,大学学历,

第二个个名字叫lily,18岁,性别为女,中学学历。

对象的使用

现在我们已经创建出了两个人,现在可以调用这两个人的特征和技能了
比如,我想知道person1的特征,可以使用如下方法:

print(person1.name)         #查看person1的名字,输出为:jack
print(person1.age)          #查看person1的年龄,输出为:22
print(person1.sex)          #查看person1的性别,输出为:male
print(person1.education)    #查看person1的学历,输出为:college

查看person1的技能时:

person1.walk()      #调用person1的行走的技能
    会打印:jack is walking slow
person1.eat()       #调用person1的吃饭的技能
    会打印:jack is eating food
person1.study()     #调用person1的学习的技能
    会打印:jack is studying hard

查看person2的特征和技能时使用同样的方法

类与对象的对比分析

print(Person.eat,person1.eat,person2.eat)
执行结果如下:
<function Person.eat at 0x0000000002951BF8>
<bound method Person.eat of <__main__.Person object at 0x000000000295D240>
<bound method Person.eat of <__main__.Person object at 0x000000000295D278>>

分别调用类的吃饭的方法,以及person1和person2的吃饭的方法,可以看到它们的内存地址都不一样,同样的,调用他们的
其他的走路和学习的方法,它们各自的内存空间也都不一样,这充分说明了它们在内存中是各自开辟了一段自己的独有的内存空间。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
开发了一款小众开源工具,没想到还有这么多人用!
由于 Gitee Pages 的访问速度很快,很多朋友会选择 Gitee Pages 部署项目(如:个人博客、开源项目国内镜像站点)。但是它不像 GitHub Pages 那样,一提交代码就能自动更新 Pages,因为 Gitee 的自动部署属于 Gitee Pages Pro 的服务。
7 0
【CheatSheets】AI速查表集合 一图胜千言
【CheatSheets】AI速查表集合 一图胜千言
6 0
最近这个 GitHub 项目,增长有点猛
今天给大家分享一个 GitHub 刷题项目,也是目前我们 Doocs 成员们在积极维护的一个项目。
5 0
如何实现一个图化框架?代码已开源!
大家好,我是不会写代码的纯序员——Chunel Feng[3]。俗话说,人生如码,码如人生。人生中,有些事情是可以同时进行的,有些事情又必须是前后依次进行的;有些事情是可以刚开始就做的,有些事情又必须等待某个时机成熟了才可以开始。
7 0
一文看懂开源图化框架中的循环设计逻辑!
相信大家在日常工作中,已经精通各种循环逻辑的实现。就拿我来说吧,多年的工作经验,已经让我可以熟练的使用 C++,Python,英语等多种语言,循环多次输出“hello word”。不过大家有没有想过一个这样的问题:如何在一个有向无环图(Directed Acyclic Graph,简称dag)中实现循环呢?
4 0
手撸一款简单高效的线程池(一)
线程池大家应该都用过,不过如何从 0 到 1 的设计一款简单好用且性能较好的线程池?我们在接下来的几篇文章中,为您一一介绍。
4 0
python自动化办公之使用xlrd读取excel文件
python自动化办公之使用xlrd读取excel文件
6 0
变量、常量
变量、常量
4 0
Travis CI简介
什么是持续集成? Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。
8 0
+关注
152
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载