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")

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

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

  • 相关阅读:
    codeforces 439C 模拟
    codeforces 435B
    【WebVR】AFrame中的A-sky无法利用src指定路径显示全景图
    【UE4】添加头文件之后VS中UCLASS()报错问题解决办法
    【UE4】蓝图之间的通讯
    git中报unable to auto-detect email address 错误的解决办法
    2017ACM省赛总结与生涯回顾
    hihocoder#1121 : 二分图一•二分图判定
    hihocoder#1039 : 字符消除
    2048low版
  • 原文地址:https://www.cnblogs.com/gengcx/p/7266126.html
Copyright © 2011-2022 走看看