zoukankan      html  css  js  c++  java
  • 面象对象语法

    • 类:就是一系列对角相似的特征与技能的结合体,但站在不同的角度,得到的分类也是不同的

    在现实中:先有对象,才有类
    在程序中:一定先定义类,后调用类来产生对象

    '''
    在现实世界中:
        对象1:王二丫
            特征:
                学校='luffycity'
                名字='王二丫'
                性别='女'
                年龄=18
            技能:
                学习
                吃饭
                睡觉
    
        对象2:李三炮
            特征:
                学校='luffycity'
                名字='李三炮'
                性别='男'
                年龄=38
            技能:
                学习
                吃饭
                睡觉
    
        对象3:张铁蛋
            特征:
                学校='luffycity'
                名字='张铁蛋'
                性别='男'
                年龄=48
            技能:
                学习
                吃饭
                睡觉
    
        总结现实中路飞学院的学生类:
            相似的特征
                学校='luffycity'
    
            相似的技能
                学习
                吃饭
                睡觉
    '''
    
    
    #定义类
    class LuffyStudent():
        school = 'luffycity' #类的数据属性
    
        def learn(self):#类的函数属性
            pass
        def eat(self):
            pass
        def sleep(self):
            pass
    #产生对象
    stu1 = LuffyStudent()
    stu2 = LuffyStudent()
    stu3 = LuffyStudent()
    
    #查看类的名称空间
    # print(LuffyStudent.__dict__)
    #查
    print(LuffyStudent.school)
    
    #增
    # LuffyStudent.county = 'China'
    # print(LuffyStudent.county)
    
    #删
    # del LuffyStudent.county
    # print(LuffyStudent.county)
    
    #改
    LuffyStudent.school = 'Luffycity'
    print(LuffyStudent.school)</pre>

    __init__方法

    __init__方法主要用来为对象定制对象独有的特性

    #定义类
    class LuffyStudent():
        school = 'luffycity'
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def learn(self):
            print('is learn')
        def eat(self):
            print('is eat')
        def sleep(self):
            print('is sleep')
    #产生对象
    stu1 = LuffyStudent('王二丫',29,'女')
    #先调用类产生空对象stu1,然后调用LuffyStudent.__init__(stu1,'王二丫',29,'女')
    stu2 = LuffyStudent('张三',18,'男')
    stu3 = LuffyStudent('李四',28,'女')
    
    #查
    # print(stu1.age)
    # #删
    # del stu1.age
    # print(stu1.age)
    
    #增
    stu1.class_name = 'Python开发'
    print(stu1.class_name)
    print(stu1.__dict__)
    
    #改
    stu1.age = 19
    print(stu1.age)

     属性查找

    类有两种属性:
    * 类的数据属性,属于对象共用的

    print(id(stu1.school))
    print(id(stu2.school))
    print(id(stu3.school))
    #输出
    2336910776112
    2336910776112
    2336910776112

    * 类的函数属性是绑定给对象使用的,称为绑定对象的方法

    print(LuffyStudent.sleep)
    print(stu1.sleep)
    print(stu3.sleep)
    print(stu2.sleep)
    #输出
    <function LuffyStudent.sleep at 0x000001EAB2BAAD90>
    <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC780>>
    <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC828>>
    <bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC7F0>>

    查找顺序

    在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就去父类里找,父类找不到就报错了

    绑定方法

    • 类中定义的函数(没有被任何装饰器装饰的),其实主要是给对象使用的,而且是绑定到对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法
    • 绑定到对象的方法的特殊之处在于,绑定给谁就由谁来调用,谁来调用,就会将‘谁’本身当做第一个参数传给方法,即自动传值(方法__init__也是一样的道理)

    在Python中一切皆对象,且python3中类与类型是一个概念,类型就是类

    练习

    练习1:编写一个学生类,产生一堆学生对象, (5分钟)

    要求:

    1. 有一个计数器(属性),统计总共实例了多少个对象
    class Student:
        school = 'luffycity'
        cont = 0
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
            Student.cont += 1
        def learn(self):
            pass
    
    stu1 = Student('张三',18,'男')
    stu2 = Student('李四',18,'男')
    stu3 = Student('王五',18,'男')
    print(Student.cont)
    

    练习2:模仿王者荣耀定义两个英雄类, (10分钟)

    要求:

    1. 英雄需要有昵称、攻击力、生命值等属性;
    2. 实例化出两个英雄对象;
    3. 英雄之间可以互殴,被殴打的一方掉血,血量小于0则判定为死亡。
    class zhugeliang:
        camp = 'red'
        def __init__(self,nickname,life_value,aggresivity):
            self.nickname = nickname
            self.life_value = life_value
            self.aggresivity = aggresivity
    
        def attack(self,enemy):
            enemy.life_value -= enemy.aggresivity
            if enemy.life_value <= 0:
                print('%s已死亡!'%enemy.nickname)
    
    class xiaoqiao:
        camp = 'blue'
        def __init__(self,nickname,life_value,aggresivity):
            self.nickname = nickname
            self.life_value = life_value
            self.aggresivity = aggresivity
    
        def attack(self,enemy):
            enemy.life_value -= enemy.aggresivity
            if enemy.life_value <= 0:
                print('%s已死亡!' % enemy.nickname)
    r1 = zhugeliang('诸葛亮',200,100)
    g1 = xiaoqiao('小乔',300,90)
    g1.attack(r1)
    g1.attack(r1)
    

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    软件开发过程须贯彻评估和测试
    【灌水】多维成功论
    改进c系列(目录)
    网站管理艺术
    .net 跨平台也是一句谎言
    用户界面和逻辑应该分离
    设计模式
    程序员找不到工作是因为管理差
    编码阶段
    保证软件开发质量的一种管理学
  • 原文地址:https://www.cnblogs.com/yjiu1990/p/9122778.html
Copyright © 2011-2022 走看看