• 面向对象基础


    1. 面向对象和面向过程

    面向过程编程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么然后干什么...基于面向过程编程的思想编写程序好比在设计一条流水线,是一种机械式的思维方式。

    面向过程:
    优点:复杂问题流程化,进而简单化
    缺点:可扩展性差

    面向对象编程的核心是对象二字,对象是特征与技能的结合体。

    基于面向对象编程的思想编写程序,就好比是在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式。

    面向对象:
    优点:可扩展性高
    缺点:编写复杂

    2. 类与对象

    '''
    对象:属性和方法的结合体
    类:一系列共同的属性和方法
    
    现实生活中:先有对象再有类
    程序中:先有类再有对象
    
    '''
    
    '''
    学生1:
        学校:老男孩
        姓名:吴子豪
        性别:女
        年龄:30
        方法:
            选课
            学习
    学生1:
        学校:老男孩
        姓名:小吴
        性别:女
        年龄:18
        方法:
            选课
            学习
    '''
    # 定义类(类名建议用驼峰体命名)
    # class关键字 类名
    class Student:
        # 变量表示属性
        school = 'oldboy'
        def choose(self):
            print('选课')
        def study(self):
            print('学习')
    
    # 生成对象   类加括号,生成对象
    stu1 = Student()
    # 获取属性和方法  通过 . 获取
    print(stu1.school)   # oldboy
    print(stu1.choose())  # 选课 
     None
    # 查看类中的属性和方法
    print(Student.__dict__)
    print(Student.__dict__['school'])   # oldboy
    print(Student.__dict__['choose'])   # <function Student.choose at 0x000002237C792EA0>
    Student.__dict__['choose'](123)    # 选课
    Student.choose(123)     # 选课
    # print(Student.scool)   # 报错
    
    # 获取对象的属性和方法
    stu1 = Student()
    print(stu1.__dict__)   # {}
    print(stu1.school)    # oldboy
    # 对象来调用方法,第一个参数不用传
    print(stu1.choose)  # <bound method Student.choose of <__main__.Student object at 0x000001DE86039128>>
    stu2 = Student()
    print(stu2.school)  # oldboy
    # 对象自己的属性和方法
    
    stu1 = Student()
    stu1.name = 'nick'
    stu1.school = 'xxxx'
    print(stu1.school)   # xxxx
    print(stu1.__dict__)   # {'name': 'nick', 'school': 'xxxx'}
    # 属性查找顺序
    # 先从对象自身找---->类中找---->报错
    Student.school = 'xxx'
    stu1 = Student()
    print(stu1.school)   # xxx
    # 像对象中放属性
    # 第一种方式:
    stu1 = Student()
    stu1.name='nick'
    # 第二种方式:通过__init__方法
    class Student:
        # 变量表示属性
        school = 'oldboy'
        def __init__(self,name):
            self.name = name
        def choose(self):
            print('选课')
        def study(self):
            print('学习')
    
    # 产生对象
    # stu1 = Student()
    stu1 = Student('nick')
    # 内部帮我们做了一些事:当我在实例化产生对象的时候,会自动调用__init__方法,完成对象的初始化
    print(stu1.name)   # nick
    stu2 = Student('jason')
    print(stu2.name)   # jason
    
    def change(obj,name):
        obj.name = name
    
    stu1 = Student('xxx')
    Student.__init__(stu1,'nick')
    change(stu1,'nick')
    print(stu1.name)   # nick
    
    stu2 = Student('bob')
    print(stu2.name)   # bob
    

    3. 绑定方法

    # 绑定方法:
    # 定义在类内部的方法:
    # 如果类来调用:就是一个普通函数,有几个参数就需要传几个参数
    # 对象来调用:他叫对象的绑定方法,第一个参数不需要传,自动传递
    class Student:
        # 变量表示属性
        school = 'oldboy'
        def __init__(self,name):
            self.name = name
        def choose(self):
            print('选课')
        def study(self):
            print(f'{self.name}学会了python')
    
    stu1 = Student('nick')
    stu1.study()
    stu1 = Student('bob')
    stu1.study()
    

    4. 一切皆对象

    # python中,字典,列表,字符串...都是对象
    # 类即类型
    # l1 = [1,2,3]
    # 类实例化产生对象
    l1 = list([1,2,3])
    l2 = list([5,6,7])
    # 对象调用对象的绑定方法,修改对象自己
    l1.append(5)
    print(l1)   # [1, 2, 3, 5]
    
    list.append(l1,9)
    print(l1)   # [1, 2, 3, 5, 9]
    
    print(type(l1))   # <class 'list'>
    
    class Student:
        school = 'oldboy'
        def choose(self):
            print('选课')
        def study(self):
            print('学习')
    a = Student()
    print(type(a))   # <class '__main__.Student'>
    

    5. 人狗大战

    # 人狗大战
    # 定义一个狗类
    class Dog:
        type_dog = '哈士奇'
        def __init__(self,name,aggressivity,hp=100):
            self.name = name
            self.aggressivity = aggressivity
            self.hp = hp
        def bite(self,target):
            # 当前狗的攻击力:self.aggressivity
            # 人的血量:target.hp
            target.hp -= self.aggressivity
            print(f'''
            狗的品种:{self.type_dog}
            {self.name}狗咬了一下{target.name}
            人掉血:{self.aggressivity}
            人的血量剩余:{target.hp}
            ''')
    
    class Human:
        def __init__(self,name,aggressivity,hp=100):
            self.name = name
            self.aggressivity = aggressivity
            self.hp = hp
        def bite(self,target):
            target.hp -= self.aggressivity
            print(f'''
            {self.name}人咬了一下狗{target.name}
            狗掉血:{self.aggressivity}
            狗的剩余血量:{target.hp}
            ''')
    
    # 实例化产生狗对象
    dog1 = Dog('haha',20)
    human1 = Human('bob',50)
    dog1.bite(human1)
    print(human1.hp)
    human1.bite(dog1)
    print(dog1.hp)
    
  • 相关阅读:
    关于web前端网站优化
    C/S与B/S架构的区别和优缺点
    什么是闭包?闭包的优缺点?
    JavaScript中基本数据类型和引用数据类型的区别
    jQuery对象与DOM对象之间的转换方法
    (转)第05节:Fabric.js的动画设置
    (转)第04节:Fabric.js用路径画不规则图形
    layui表单与原生js表单的一些小问题(三)
    layui表单与原生js表单的一些小问题(二)
    layui表单与原生js表单的一些小问题(一)
  • 原文地址:https://www.cnblogs.com/yushan1/p/11413166.html
Copyright © 2020-2023  润新知