• CSIC_716_20191125【面向对象编程--类以及类的实例化】


    面向对象编程:是一种编程思想

    对象的定义:特征与功能的集合体

    优点:可扩展性强

    缺点:编程复杂度高,难度偏大

    类的定义:一系列对象之间相同特征与技能的结合体

    调用类的时候(实例化是时候),发生的事情:

    产生一个空对象的名称空间----------->触发__init__方法,并将对象名作为第一个参数传入------------>将其他参数一并传给__init__。

    可以通过__dict__方法查看类和对象名称空间中的具体内容。

    对类和对象进行查、增、删、改的具体操作:(此处类和对象的操作是相似的,以其中对象为例)

    对象 = 类();obj = Student()

    obj.name 查看obj对象name的值

    obj.new = X 新增一个new属性,赋值为X

    obj.name = Y 将obj对象的name属性修改为Y

    del obj.new 删除objs=new属性

    类实例化多个对象时,多个对象共用类中的数据,即指向同一个内存。(类的数据特性)

    对个对象也都可以使用类中的函数,不过,这些函数谁调用就和谁绑定,称之为对象的绑定方法。(类的函数特性)

    对象在调用绑定方法的时候,会将自身作为第一个参数传入绑定方法中,然后将其他参数一并传给绑定方法。

    在python3中,类即类型。所有的数据类型都是类,都可以被实例化。故:一切皆对象

    类与对象之间的交互

    以下程序展示了两个类之间的交互。people和dog之间的互相攻击

    class People:
        camp = 'human'
    
        def __init__(self, name, attack, life):
            self.attack = attack
            self.name = name
            self.life = life
    
        def attack1(self, target):
            print(f'{self.name}开始攻击')
            if target.life >= self.attack:
                target.life -= self.attack
                return True
            else:
                target.life = 0
                print(f'{target.name}挂了')
                return False
    
    
    class Dog:
        camp = 'beast'
    
        def __init__(self, attack, name, life):
            self.attack = attack
            self.life = life
            self.name = name
    
        def attack1(self, target):
            print(f'{self.name}开始攻击')
            if target.life >= self.attack:
                target.life -= self.attack
                return True
            else:
                target.life = 0
                print(f'{target.name}挂了')
                return False
    
    
    p1 = People('sun', 100000, 200)
    d1 = Dog(30000, 'moon', 50000000)
    
    while True:
        res = p1.attack1(d1)
        if not res:
            break
        res2 = d1.attack1(p1)
        if not res2:
            break
    
    print(f'{p1.name}的血量为{p1.life}')
    print(f'{d1.name}的血量为{d1.life}')
    

      

  • 相关阅读:
    我的第一个java程序
    ==和equals的区别
    后缀数组题目总结
    后缀数组入门
    【POJ.3415 Common Substrings】后缀数组 长度不小于K的公共子串个数
    【UOJ #519 查查查乐乐】 DP
    【CF-1350 D. Orac and Medians】 思维
    【CF-1350 C
    【CF 1350 B.Orac and Models】 DP
    【POJ-2774】Long Long Message 后缀数组 最长公共子串(出现两次不重叠子串)
  • 原文地址:https://www.cnblogs.com/csic716/p/11928606.html
Copyright © 2020-2023  润新知