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)
原文地址:https://www.cnblogs.com/yilia-er/p/14090064.html