zoukankan      html  css  js  c++  java
  • 面向对象编程

    面向对象编程

    什么是面向对象?

    面向对象是一门编程思想

    对象在这里指的可不是你的男女朋友

    在这里对象指的是特征与技能的结合体

    基于改编成思想就好比在创造世界,一种上帝式的思维方式

    注意:要将自己当作一个上帝,想创造什么就创造什么,为所欲为

    该编成思想的优缺点是:

    优点:

    可扩展性高

    缺点:

    编写程序的复杂度比面向过程高

    什么是对象?

    在说这个之前我们要知道什么是类

    类指的是类型,类别

    在程序中,必须现有类,通过调用类,产生对象

    对象指的是特征与技能的结合体,类指的是对象之间相同的特征与技能的结合体

    定义类的语法

    class 类的名字 :

    ​ —对象之间相同的特征

    ​ —技能

    # 定义老男孩学生类,命名规范,驼峰命名法
    class OldboyStudent:
        # 都在老男孩学习,就是对象之间相同的特征
        school = "oldboy"
        # 注意:在类内部定义函数,会有一个默认参数,self
        # 学生的学习技能
        def learn(self):
            print("learning....")
    # 调用类时,产生对象obj
    # 对象调用方法时: 会将对象当做第一个参数传入方法中。
    obj = OldboyStudent()
    '''
    由对象来调用类内部的函数,称之为对象的绑定方法。
        对象的绑定方法特殊之处: 会将对象当做第一个参数传给该方法。
    '''
    

    上面说的都是对象之间相同的特征

    下面我们来说一下,如何为对象传入独有的特征

    使用__ init __()方法

    在这里要注意:

    由对象来调用类内部的函数,称之为对象的绑定方法

    看到self就应该知道是对象本身

    init()方法是在类内部定义的方法,在调用类时触发,会自动将对像当做第一个参数传入,括号内的所有参数会一并传给init()

    class OldboyStudent:
        school = "oldboy"
        # 为对象传入独有的name,age,sex
        # 注意: 看到self就应该知道是对象本身
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
        def learn(self):
            print("learning....")
    # 为obj对象独有特征传入参数
    obj = OldboyStudent("kang", 18, "male")
    print(obj1.name, obj1.age, obj1.sex)
    # 打印结果
    # kang 18 male
    

    实现类或对象属性操作:增、删、改、查

    class OldboyStudent:
        school = "oldboy"
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
        def learn(self):
            print("learning....")
    # 调用类时,产生对象obj1
    # 类名+() 产生对象
    obj1 = OldboyStudent("kang", 18, "male")
    print(obj1.name, obj1.age, obj1.sex)
    print(obj1.school)
    # 实现类或对象属性操作:增、删、改、查
    # 增
    obj1.girlfind = "zhao"
    print(obj1.girlfind)
    # 删
    del obj1.sex
    # print(obj1.sex)     # 已经删除掉了,现在再打印就会报错
    # 改
    obj1.school = "old"
    print(obj1.school)
    # 查
    print(obj1.age)     # 查看obj1对象中的年龄
    

    对象名字的查找顺序

    1、对象.属性会先找对象自己的

    2、若对象没有,会找类的

    3、若类没有,就会报错

    扩展练习:人狗大作战

    '''
    需求: 有一个人对象,狗对象,人狗互咬。
    
    - 对象人1:
        - 特征:
            - 生命
            - 名字: name = '张全蛋'
            - 攻击力: arg
    
        - 技能:
            - 咬:bite
    狗对象1:
        - 特征:
            - 生命: 200
            - 名字: name = '大黑'
            - 品种: dog_type = '黑贝'
            - 攻击力: arg
    
        - 技能:
            - 咬:bite
            
    '''
    # 人类
    class Pepole:
    
        def __init__(self, name, hp, arg):
            self.name = name
            self.hp = hp
            self.arg = arg
    
        # 人调用bite时,传入狗对象
        def bite(self, dog_obj):
            print(f"人:[{self.name}]开始咬狗:[{dog_obj.name}]!")
    
            # 减掉狗的生命值,值为人的攻击力
            dog_obj.hp -= self.arg
            print(f"狗的血量减少[{self.arg}]还剩血量[{dog_obj.hp}]")
    
            if dog_obj.hp <= 0:
                print(f"狗[{dog_obj.name}]已经挂了")
                return True
    
    
    # 狗类
    class Dog:
    
        def __init__(self, name, hp, dog_type, arg):
            self.name = name
            self.hp = hp
            self.dog_type = dog_type
            self.arg = arg
    
        # 狗对象调用bite时,传入人对象
        def bite(self, p_obj):
            print(f"狗:[{self.name}]开始咬人:[{p_obj.name}]!")
    
            # 减掉人的生命值,值为狗的攻击力
            p_obj.hp -= self.arg
            print(f"人的生命值减掉[{self.arg}],还剩血量[{p_obj.hp}]")
    
            if p_obj.hp <= 0:
                print(f"人[{p_obj.name}]已经挂了")
                return True
    
    
    p1 = Pepole("张全蛋", 2000, 50)
    d1 = Dog("大黑", 200, "黑贝", 350)
    
    
    import time
    
    
    # 人狗开始互咬!
    while True:
        res1 = d1.bite(p1)
        if res1:
            break
        time.sleep(2)
        res2 = p1.bite(d1)
        if res2:
            break
        time.sleep(2)
    # 打印结果
    # 狗:[大黑]开始咬人:[张全蛋]!
    # 人的生命值减掉[350],还剩血量[1650]
    # 人:[张全蛋]开始咬狗:[大黑]!
    # 狗的血量减少[50]还剩血量[150]
    # 狗:[大黑]开始咬人:[张全蛋]!
    # 人的生命值减掉[350],还剩血量[1300]
    # 人:[张全蛋]开始咬狗:[大黑]!
    # 狗的血量减少[50]还剩血量[100]
    # 狗:[大黑]开始咬人:[张全蛋]!
    # 人的生命值减掉[350],还剩血量[950]
    # 人:[张全蛋]开始咬狗:[大黑]!
    # 狗的血量减少[50]还剩血量[50]
    # 狗:[大黑]开始咬人:[张全蛋]!
    # 人的生命值减掉[350],还剩血量[600]
    # 人:[张全蛋]开始咬狗:[大黑]!
    # 狗的血量减少[50]还剩血量[0]
    # 狗[大黑]已经挂了
    
    调用类产生对象的过程成为实例化,对象就是类的实例

    一切皆对象: 在python3中,类即类型。

  • 相关阅读:
    Linux软件安装【JDK安装】
    接口自动化<009>:Python 接口自动化Mock使用
    接口自动化<008>:Python 自定义装饰器
    接口自动化<007>:Python 装饰器 @functools.wraps(func)
    接口自动化<006>:Python 装饰器 @retry
    接口自动化<005>:Python中*args 和 **kwargs的用法详解
    接口自动化<004>:json.dumps()、json.loads()与json.dump()、json.load()
    接口自动化<003>:request部分参数解析
    pycharm常用设置及快捷键说明
    接口自动化<002>:session.request 会话用作前后文管理器
  • 原文地址:https://www.cnblogs.com/aheng/p/11929225.html
Copyright © 2011-2022 走看看