zoukankan      html  css  js  c++  java
  • Python类和人类

    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",18,"","0")
    p2 = People("Alex",8,"","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",18,"","0")
    p2 = People("Alex",8,"","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",18,"","0")
    p2 = People("Alex",8,"","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",18,"","0")
    p2 = People("Alex",8,"","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",18,"","0")
    p2 = People("Alex",8,"","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",18,"","0")
    p2 = People("Alex",8,"","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",18,"Female","AB")
    p1.write("Alex")

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

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

  • 相关阅读:
    LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)
    精帖转载(关于stock problem)
    LeetCode 122. Best Time to Buy and Sell Stock II (stock problem)
    LeetCode 121. Best Time to Buy and Sell Stock (stock problem)
    LeetCode 120. Triangle
    基于docker 搭建Elasticsearch5.6.4 分布式集群
    从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
    Harbor实现容器镜像仓库的管理和运维
    docker中制作自己的JDK+tomcat镜像
    docker镜像制作---jdk7+tomcat7基础镜像
  • 原文地址:https://www.cnblogs.com/gengcx/p/7266126.html
Copyright © 2011-2022 走看看