• python05——面向对象基础(1)


    1.1面向对象介绍

    面向过程——根据业务逻辑丛上到下写代码
    函数式——将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
    面向对象编程——将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

    1.2.类和对象的概念

    类就是一个模板,模板里可以包含多个函数,函数里实现一些功能。类相当于制造汽车的图纸
    对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。对象相当于制造好的汽车

    类(Class)由3个部分构成

    类的名称:类名

    类的属性:一组数据,即具有一组相似特征(属性)和行为(方法)的一系列对象的集合

    类的方法:允许对进行操作的方法(行为)

    eg.创建一个人类(对象),类名:人(Person),属性:身高(height)、 年龄(age),方法:吃(et),跑(run)

    类的抽象

    具有相同(或者类似)属性和行为的一系列对象的集合都可以抽像出一个类
    ●例1:小明开着他家的宝马去逛街
    小明->可以抽象中人类
    宝马->可以抽象出车类
    ●例2:抽象坦克大战中的类
    坦克           墙        子弹
    类名: Tank       类名: Wall      类名: Bullet
    属性:血量类型      属性:血量类型     属性:杀伤力
    方法:发射子弹      方法:阻挡

    1.3.定义类和对象

    ###创建类
    class Person:      ##采用大驼峰方式命名(单词首字母大写)
        name='yh'     
        age='18'
        def eat(self):
            print("大口的吃饭")
            pass
        def run(self):
            print("飞快的跑")
    ###创建对象
    xm=Person()
    print("{}的年龄是{}".format(xm.name,xm.age))
    xm.eat()     ##调用函数

    1.4.实例方法与属性

    在类的内部,使用def关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。一个类中可以有多个实例方法。

    类中的属性——类属性,如上面的name、age

    类中实例的属性——实例属性,通过self.变量名定义

    def __int__(self):
         self.name='yh'

    1.5._init_方法

    class People:
        def __init__(self):
            self.name='小倩'
            self.sec='girl'
            self.age='20'
        def eat(self):
            print('喜欢吃榴莲')
            pass
    xq=People()
    xq.name='小倩'
    xq.age=20
    xq.sex='girl'
    xq.eat()
    print(xq.name,xq.sex,xq.age)

    传参:

    class People:
        def __init__(self,name,sex,age):
            self.name=name
            self.sex=sex
            self.age=age
        def eat(self,food):
            print(self.name+'喜欢'+food)
            pass
    zp=People('张鹏','boy','12')
    print(zp.name,zp.sex,zp.age)
    zp.eat('香蕉')

    1.6.理解self

    self就是对象的引用,在类中定义实例方法的时候才有意义,在调用时不必传入相应的参数,而是由解释器自动的去指向,名称可以改

    1.7.魔法方法

    常见的魔法方法:

    __init__方法:初始化一个类,在创建实例对象为其赋值时使用。

    __str__方法:在将对象转换成字符串 str(对象)测试的时候,打印对象的信息。

    class an():
        def __init__(self,name,color):
            self.name=name
            self.color=color
            pass
        def __str__(self):
            return '我的名字是%s,我的颜色是%s'%(self.name,self.color)
        pass
    dog=an('旺财','black')
    print(dog)

    __new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。

    class an():
        def __init__(self,name,color):
            self.name=name
            self.color=color
            pass
        def __str__(self):
            return '我的名字是%s,我的颜色是%s'%(self.name,self.color)
        ##场景:可以控制创建对象的一些属性限定
        def __new__(cls, *args, **kwargs):##第一个被执行的函数
            print('----new执行-----')
            return object.__new__(cls) ###真正创建对象实例的
        
    dog=an('旺财','black')
    print(dog)

    __new__和__init__函数的区别:

    new类的实例化方法必须要返回该实例,否则对象就创建不成功,至少要一个参数是cls代表要实例化的类,此参数自动提供

    init用来数据属性的初始化工作

    执行时new早于init

    1.8.案例-决战紫禁之巅

    决战紫禁之巅有两个人物,yh以及lh

    属性:name玩家的名字,blood玩家血量

    方法:tong()捅对方一刀,对方掉血10滴

               kanren()砍对方一刀,对方掉血15滴

               chiyao()吃一颗药,补血10滴

               __str__打印玩家状态。

    2.1

    ###定义一个类【角色类】
    
    import time  ##导入时间的库
    class Role:
        def __init__(self,name,hp):
            '''
            构造初始化函数
            :param name:角色吗
            :param hp:血量
            '''
            self.name=name
            self.hp=hp
            pass
        def tong(self,enemy):
            '''
            捅人
            :param enemy: 敌人
            :return:
            '''
            enemy.hp-=10   #敌人减10滴血
            info='【%s】捅了【%s】一刀'%(self.name,enemy.name)
            print(info)
        def kanren(self,enemy):
            '''
            砍人
            :param enemy:
            :return:
            '''
            enemy.hp -= 15  # 敌人减10滴血
            info = '【%s】砍了【%s】一刀' % (self.name, enemy.name)
            print(info)
        def chiyao(self,):
            '''
            吃药
            :return:
            '''
            self.hp += 10
            info = '【%s】吃了一颗补血药' % (self.name)
            print(info)
        def __str__(self):
            return '%s还剩下%s的血量'%(self.name,self.hp)
    ###创建【yh/lh】2个实例化对象
    yh=Role('yh',100)
    lh=Role('lh',100)
    
    while True:
        if yh.hp<=0 or lh.hp<=0:
            break
        yh.tong(lh) ##yh捅lh
        print(yh)
        print(lh)
        print('-----------------')
        lh.kanren(yh)
        print(yh)
        print(lh)
        print('-----------------')
        yh.chiyao()
        print(yh)
        print(lh)
        time.sleep(1)  ##休眠一秒
    print('对战结束')
    View Code

    巩固:

    1.定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加上颜色属性

    class shuiguo:
        def __init__(self,name,color):
            self.name=name
            self.color=color
        def __str__(self):
            return '%s的颜色是%s'%(self.name,self.color)
    
    pg=shuiguo('苹果','红色')
    jz=shuiguo('橘子','橙色')
    print(pg)
    print(jz)
    View Code

    2、定义一个Animal类

    (1)、 使用__init__初始化方法为对象添加初始属性。如颜色,名字,年龄。

    (2)、定义动物方法,如run, eat等方法。 如调用eat方法时打印xx在吃东西就可以。

    (3)、定义一个__str__方法,输出对象的所有属性。

    class animal:
        def __init__(self,name,age,color):
            self.name=name
            self.age=age
            self.color=color
        def run(self):
            print('{}在跑步'.format(self.name))
        def eat(self):
            print('{}在吃东西'.format(self.name))
        def __str__(self):
            return '【%s】的年龄【%s】,颜色【%s】'%(self.name,self.age,self.color)
    tz=animal('兔子','1岁','白色')
    print(tz)
    View Code
    class People:
    ###改进
    def __init__(self):
    self.name='小倩'
    self.sec='girl'
    self.age='20'
    def eat(self):
    print('喜欢吃榴莲')
    pass
    xq=People()
    xq.name='小倩'
    xq.age=20
    xq.sex='girl'
    xq.eat()
    print(xq.name,xq.sex,xq.age)
  • 相关阅读:
    关于Oracle 数据库使用dba_tables或者all_tables或者user_tables统计数据时,与直接查询表统计时数据不一致的记录
    js格式化时间
    slf4j介绍以及与Log4j、Log4j2、LogBack整合方法
    LogBack日志小记
    log4j2 日志框架小记
    Log4j日志框架小记
    29.求数字组最大子序列之和
    28.找出最的几位数
    27.数组元素重复度过数组长度一半
    26.字符串全排列
  • 原文地址:https://www.cnblogs.com/yilia-er/p/14090064.html
Copyright © 2020-2023  润新知