Python中的类

俗话说,物以类聚,人以群分,类是什么,类就是一组相同属性的集合。下面来结合人,探讨Python中类和人类的关系。

首先,我们定义一个人的类,如下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")

上面代码中,我们定义了一个人的类,人都有姓名,年龄,性别,血型等属性,还有说话,学习,走路等方法;并且我们创建了两个人,一男一女,"Wupeiqi"和"Alex",下面我们来一步一步完善这两个人。

我们知道,男人有喉结,女人会生小孩,这两个是男,女的区别,也是各自独有的属性。那么给"wupeiqi"和"Alex"添加这种属性。如下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")
p1.birth = "Woman can give birth to a baby" #给女人添加生孩子功能
p2.adam = "Man has Adam's apple" #给男人添加喉结属性

我们知道,男人和女人都有学习的功能,我们人类自己有人会说英语,有人会说日语,总之各种各样的语言,这些是个体所具有的属性,比如"wupeiqi"会说日语,"Alex"会说英语,我们来实现一下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")
p1.birth = "Woman can give birth to a baby" #给女人添加生孩子功能
p2.adam = "Man has Adam's apple" #给男人添加喉结属性
p1.language1 = "Japanese"
p2.language2 = "English" print("{0} is can speak {1}".format(p1.name,p1.language1)) #打印wupeiqi说的语言
print("{0} is can speak {1}".format(p2.name,p2.language2)) #打印ALex说的语言
print("%s is can speak %s" %(p1.name,p1.language2)) #看wupeiqi是否会说英语
print("%s is can speak %s" %(p2.name,p2.language1)) #查看Alex是否会说日语 主要是看语言能力能否交叉
运行结果如下:
wupeiqi is can speak Japanese
Alex is can speak English
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人类.py", line 33, in <module>
    print("%s is can speak %s" %(p1.name,p1.language2))          #看wupeiqi是否会说英语
AttributeError: 'People' object has no attribute 'language2'

从上面代码可以看出,"wupeiqi"会说日语,但是"Alex"不具有"wupeiqi"的能力。这就像我们人类一样,你具备的能力,别人是不一定具备的,别人具备的能力,你也是不一定有的。类就像人类世界一样。我们可以创建属性,不一样的能力,共有的能力。再比如,我们知道,我们都会说话,但是有些人生病了,或者天生有缺陷,不具备这种能力,我们可以拿走这些能力,如下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")
p1.walk()
p2.walk()
运行如下:
wupeiqi can walk!!!!
Alex can walk!!!!

上面代码中,我们可以看出,本来Alex和wupeiqi都会跑,现在突然出现一点小情况,Alex不会跑了(当然这只是假设),如下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")
print(People.walk," ",p1.walk)
p1.walk()
p2.walk() del People.walk # try:
# delattr(p2,"walk")
# except AttributeError:
# print("方法不能删除吗!!!!?") p1.walk()
p2.walk()
运行结果如下:
wupeiqi can walk!!!!
Alex can walk!!!!
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人类.py", line 37, in <module>
    p1.walk()
AttributeError: 'People' object has no attribute 'walk'

从上面代码可以看出,创建的实例是不能删除类中的方法的,类中的方法不支持删除,下面来看看对类中的属性进行操作:

我们让"wupeiqi"成为无名氏,如下:

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def walk(self):
'''创建走路方法'''
print("%s can walk!!!!" %self.name) def speak(self):
"""创建说话的属性"""
print("%s can speak!!" %self.name) def learn(self):
'''创建学习的属性'''
print("%s is learning." %self.name) p1 = People("wupeiqi",,"女","")
p2 = People("Alex",,"男","AB")
print(p1.name,p2.name) del p1.name
print(p1.name,p2.name)
运行结果如下:
wupeiqi Alex
Traceback (most recent call last):
  File "/home/zhuzhu/第七天/人类.py", line 29, in <module>
    print(p1.name,p2.name)
AttributeError: 'People' object has no attribute 'name'

从上面运行结果可以看出,我们删除了类中的属性,即属性是可以修改和删除的,我们让"wupeiqi"成为了无名氏,不在具有名字了。

从上面可以看出,类中,我们只能修改和删除类的属性,不能删除类的方法。

类和人类是一样的,都是封装一个大致的属性,可以创建无数个个体,每个个体都有自己独特的属性,我们可以通过添加属性进行添加,也会有很多不同的技能和方法。我们都能够实现类中个体实例的完善。

就如我们人类自己一样,我们缺少某个属性,我们可以通过自己的努力去获取。

类就是对现实生活世界的描述。

class People(object):
'''创建人类''' def __init__(self,name,age,sex,blood_type):
"""人具有姓名,年龄,性别,血型的属性"""
self.name = name
self.age = age
self.sex = sex
self.blood_type = blood_type def write(self,write_abality=False):
'''创建写作的能力,不是每个人都具有写作的功能,所以需要进行判断'''
if write_abality == False:
print("Sorry,%s is a illiteracy,so %s cann't have the ability of writing!" %(self.name,self.name))
elif write_abality == True:
print("%s is a professional in an and literature,%s can write!" %(self.name,self.name))
else:
print("Sorry,cann't identify the parameter of %s." %write_abality) def walk(self):
print("%s can walking!") p1 = People("Alex",,"Female","AB")
p1.write("Alex")

我们知道,有些人会写,有些人不会写,所以我们要进行判断,判断这个人是否具有写这个属性,如果有,就能够写;如果没有,就不具备。因而要加上一个判断。这样就能查看是否具有写的功能。

现实世界很多东西需要我们去学习,现在对类的掌握还不是很彻底,尤其是不知道如何描述现实世界,这个还需要自己去积累。

Python类和人类的更多相关文章

  1. python类:magic魔术方法

    http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...

  2. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

  3. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  4. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  5. Python类中super()和__init__()的关系

    Python类中super()和__init__()的关系 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(sel ...

  6. LightMysql:为方便操作MySQL而封装的Python类

    原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python ...

  7. python 类属性与方法

    Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...

  8. python 类以及单例模式

    python 也有面向对象的思想,则一切皆对象 python 中定义一个类: class student: count = 0         books = [] def __init__(self ...

  9. Python类的特点 (1):构造函数与方法

    Python中,类的特点: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) def __init__(self): print ...

随机推荐

  1. Java Socket Timeout 总结

    原文出处:囚兔 摘要: Java的网络编程Socket常常用于各种网络工具,比如数据库的jdbc客户端,redis客户端jedis,各种RPC工具java客户端,这其中存在一些参数来配置timeout ...

  2. [Baltic2009]Radio Transmission

    bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time ...

  3. 2015/12/12 考了PAT,又回来玩Python了。

    上次写飞机大战的坑还没填完,然后就有好长时间没有更新博客了.可能大家在疑惑我在干什么... 其实不是有意暂停博客更新的,十一月学校里有两个考试要准备,然后有好多实验要做.平时的课余时间本来就不是很多了 ...

  4. redis内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...

  5. 四、Kafka 核心源码剖析

    一.Kafka消费者源码介绍 1.分区消费模式源码介绍 分区消费模式直接由客户端(任何高级语言编写)使用Kafka提供的协议向服务器发送RPC请求获取数据,服务器接受到客户端的RPC请求后,将数据构造 ...

  6. 最佳的MongoDB客户端管理工具

    <最佳的MongoDB客户端管理工具> 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一个好的MongoD ...

  7. linux 自定义yum仓库、repo文件 yum命令

    目录 自定义yum仓库:createrepo 自定义repo文件 使用yum命令安装httpd软件包 卸载httpd软件包:yum –y remove 软件名 清除yum缓存:yum clean al ...

  8. [NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)

    [NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...

  9. VMware虚拟机 安装centos7并设置静态ip 连接外网

    首先下载VMware虚拟机:http://xzc.197746.com/VMware-Workstation-12.5.9.zip 然后下载centos7镜像:http://vault.centos. ...

  10. 使用java8的StreamAPI对集合计算进行代码重构

    方法: 查询出所有部门成员中年龄大于30的员工姓名 部门对象: 员工对象: 模拟数据: private static List<Dept> list=new ArrayList<De ...