Python面向对象基础(上)—Python Day7

导入

——Python面向对象基础
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。

面向对象介绍

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

面向过程编程与函数式编程对比

面向过程的关注点是: 怎么做
面向对象的关注点是: 谁来做
面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。
面向对象编程**(Object Oriented Programming-OOP)**是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

类和对象的概念

类和对象是面向对象编程中重要的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

类的组成部分

类(Class)由3个部分构成
类的名称: 类名
类的属性: 一组数据
类的方法: 允许对进行操作的方法 (行为)
例如:创建一个人类
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
方法:吃(eat),跑(run)…
定义类和对象
创建类
在这里插入图片描述

class Person(object):
    name='小明'
    age=18
    def eat(self):
        print('吃饭')

创建对象
对象名=类名()
例子

class Person(object):
    name='小明'
    age=18
    def eat(self):
        print('吃饭')
    def run(self):
        print('跑步')

xm =Person() # 创建对象
xm.eat() # 调用方法
print('{}的年龄是:{}'.format(xm.name,xm.age))  # 访问类属性

---------------------------------输出结果-------------------------------

吃饭
小明的年龄是:18

实例方法
在类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
实例方法与属性
类里面定义的变量。定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性

class Animal(object):
    colour='白色'   # 类属性
    def __int__(self):
        self.name='旺财'   #实例属性
        '''
        实例方法,使用def关键字定义,第一个形参默认传实例对象本身
        一般使用self作为第一个参数
        '''
    def test(self):
        print('我是实例方法')
    def show(self):
        print('Animal.show')

__init__方法
创建一个Animal类,并实例化一个dog对象和cat对象。
init(self) 方法,初始化方法,实例化对象的时候自动调用,完成一些初始化设置。
如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用

class Animal(object):
    def eat(self):
        print('喜欢吃肉')
dog=Animal()  #创建一个对象
dog.colour='red'  #添加属性
dog.name='旺财'  #添加属性
dog.age='2岁'
dog.eat()
print(dog.name,dog.colour,dog.age)

cat=Animal()  #创建一个对象
cat.colour='black'  #添加属性
cat.name='妞妞'  #添加属性
print(cat.name,cat.colour)

print('----------------改进-------------------')
class Animal(object):
    def __init__(self):
        self.name='旺财'
        self.colour='red'
        self.age='2岁'
    def eat(self):
        print('喜欢吃肉')
dog=Animal()  #在创建新对象的时候是自动执行的
print(dog.name)
dog.name='发财'  #添加属性
dog.age='2岁'
dog.eat()
print(dog.name,dog.colour,dog.age)

print('----------------改进2-------------------')
class Animal(object):
    def __init__(self,name,colour,age):
        self.name=name
        self.colour=colour
        self.age=age
    def  eat(self,food):
        print(self.name+'喜欢吃:'+food)
dog=Animal('旺财','black','2岁')
print(dog.name,dog.colour)
dog.eat('骨头')
cat=Animal('小花','red','3岁')
print(cat.name,cat.colour,cat.age)
cat.eat('鱼')
---------------------输出结果--------------------------
吃饭
小明的年龄是:18
喜欢吃肉
旺财 red 2岁
妞妞 black
----------------改进-------------------
旺财
喜欢吃肉
发财 red 2----------------改进2-------------------
旺财 black
旺财喜欢吃:骨头
小花 red 3岁
小花喜欢吃:

理解self
self和对象指向同一个内存地址,可以认为self就是对象的引用。

class Person:
    '''
    定义类
    '''
    def eat(self):
        '''
        实例方法
        :return:
        '''
        print('self={}'.format(id(self)))
        pass
    pass
xw=Person()
print('self=%s'%id(xw))
xw.eat()
-----------------运行结果---------------------
self=1809163727296
self=1809163727296

self传参问题

所谓的self,可以理解为对象自己,某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。

print('------------------添加参数--------------------')
class Person:
    '''
    定义类
    '''
    def eat(self,name,food):
        '''
        实例方法
        :return:
        '''
        print('%s 喜欢吃 %s'%(name,food))
        pass
    pass
xw=Person()
print('self=%s'%id(xw))
xw.eat('小王','榴莲')
-----------------输出结果--------------------
self=2269762334784
小王 喜欢吃 榴莲

魔术方法

在python中,有一些内置好的特定的方法,方法名是“xxx”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
下面介绍几种常见的魔法方法。
__init__方法:初始化一个类,在创建实例对象为其赋值时使用。
__str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
__new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
__class__方法:获得已知对象的类 ( 对象.class)。
__del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。
……

class Person:
    '''
    定义类
    '''
    def __init__(self,name,food):
        '''
        实例方法
        :return:
        '''
        self.name=name
        self.food=food
    def __str__(self):
        return  '%s 喜欢吃 %s'%(self.name,self.food)
    '''
    定义了__str__方法,在打印对象的时候,会执行__str__方法。__str__方法只能return一个字符串。
    '''
    pass
xw=Person('小王','榴莲')
print(xw)
-----------------输出结果-------------------------
小王 喜欢吃 榴莲

案例-决战紫禁之巅

决战紫禁之巅有两个人物,西门吹雪以及叶孤城
属性:
name 玩家的名字
blood 玩家血量
方法:
tong() 捅对方一刀,对方掉血10滴
kanren() 砍对方一刀,对方掉血15滴
chiyao() 吃一颗药,补血10滴
str 打印玩家状态。

import time
class Hero():
    '''
    创建初始化方法
    '''
    def  __init__(self,name,blood):
        '''
        定义name blood变量
        :param name:
        '''
        self.name=name
        self.blood=100
    def WinT(self,enemy):
        '''捅对方一刀'''
        enemy.blood-=10
        info='%s捅了%s一刀'%(self.name,enemy.name)
        print(info)

    def WinK(self, enemy):
        '''砍了对方一刀'''
        enemy.blood-=15
        info = '%s砍了%s一刀' % (self.name, enemy.name)
        print(info)
    def  Medicine(self):
        self.blood += 10
        info = '%s吃了一颗药,体力加10' % self.name
    def __str__(self):
        return '%s 还剩 %s 的血量'%(self.name,self.blood)
#创建两个角色,西门吹雪和叶孤城
xmc=Hero('西门吹雪',100)
ygc=Hero('叶孤城',100)
while True:
    if xmc.blood <=0 or ygc.blood <=0:
        break
    xmc.WinT(ygc)
    print(ygc)
    print(xmc)
    print('*****************************************')
    ygc.WinK(xmc)
    print(ygc)
    print(xmc)
    print('*****************************************')
    xmc.Medicine()
    print(ygc)
    print(xmc)
    time.sleep(1)
print('对战结束。。。。')
------------------输出结果--------------------
西门吹雪捅了叶孤城一刀
叶孤城 还剩 90 的血量
西门吹雪 还剩 100 的血量
*****************************************
叶孤城砍了西门吹雪一刀
叶孤城 还剩 90 的血量
西门吹雪 还剩 85 的血量
*****************************************
叶孤城 还剩 90 的血量
西门吹雪 还剩 95 的血量
西门吹雪捅了叶孤城一刀
叶孤城 还剩 80 的血量
西门吹雪 还剩 95 的血量

类和对象的概念
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能;
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
定义类和对象
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾;
实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
实例方法与属性
在类的内部,使用 def 关键字可以定义一个实例方法;
定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性。
__init__方法
构造初始化函数,在创建实例对象为其赋值时使用。
理解self
self和对象指向同一个内存地址,self就是对象的引用。
魔法方法
在python中,有一些内置好的特定的方法;
方法名是“xxx”;
在进行特定的操作时会自动被调用。

课后问答题
1、什么是类,什么是对象
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

2、python中定义一个类的语法格式是什么
class 命名:
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法

3、类(class)由哪三个部分构成
类名、属性、方法

4、init方法有什么作用,如何定义
init()方法,在创建一个对象时默认被调用,不需要手动调用
定义: def int(self):

5、方法中的"self"代表什么。
就是对象自己,某个对象调用其方法时,python解释器就会把这个对象作为第一个参数传给self,所以开发者只需传递后面的参数即可

6、在类中定义init方法的时候第一个形参必须是self吗?self可以用其他东西代替吗?
是,可以

7、Python面向对象中的魔法方法,是如何定义的,魔法方法需要开发人员去调用吗?
xxx
不需要,操作时会自动被调用

8、str方法可以没有返回值,这句话是否正确?
不正确 返回字符串

9、查看下面代码,请写出有那些是属性,那些是实例方法。

class Person(object):
    foot = 2
    eye = 2
    mouth = 1
    def __init__(self,name,age):
        self.name = name    #属性
        self.age = age       #属性
        print("self=%s" % id(self))
    def run(self):
        print('飞快跑')   #方法
    def eat(self):
        print('吃饭')       #方法
xiaoming = Person('小明', 18)
print("xiaoming=%s" % id(xiaoming))

课后实操题
1、python中如何通过类创建对象,请用代码举例说明。

class Person():
  def run(self):
      print('学生每天进行2200米的跑步训练')
      pass
  pass
XiaoLi=Person()
XiaoLi.run()

2、如何在类中定义一个方法,请用代码举例说明。

class Person():
  def run(self):  #方法
      print('学生每天进行2200米的跑步训练')
      pass
  pass
XiaoLi=Person()
XiaoLi.run()

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

class Fruit():
    def __init__(self,name,colour):
        self.colour=colour
        self.name = name
    def  __str__(self):
        return "%s 的颜色是 【%s】"%(self.name,self.colour)
apple=Fruit('苹果','红色')
print(apple)
print('*'*20)
watermelon=Fruit('西瓜','绿色')
print(watermelon)
print('*'*20)
orange=Fruit('橙子','橙色')
print(orange)
print('*'*20)
----------------------输出结果----------------------
苹果 的颜色是 【红色】
********************
西瓜 的颜色是 【绿色】
********************
橙子 的颜色是 【橙色】
********************

4、请编写代码,验证self就是实例本身。

class Person():
    def weight(self):
        print('self=%s'%id(self))
LiMing=Person()
LiMing.weight()
print('self=%s'%id(LiMing))
----------------------输出结果----------------------
self=2128884911408
self=2128884911408

5、定义一个Animal类
(1)、使用__init__初始化方法为对象添加初始属性。如颜色,名字,年龄。
(2)、定义动物方法,如run,eat等方法。如调用eat方法时打印xx在吃东西就可以。
(3)、定义一个__str__方法,输出对象的所有属性。

class Animal():
    def __init__(self,name,colour,age):
        self.name=name
        self.colour=colour
        self.age=age
    def eat(self):
        print('【%s】 在吃东西'%self.name)
    def run(self):
        print('【%s】 在奔跑'%self.name)
    def __str__(self):
        return '【%s】的颜色是:%s,%s岁了'%(self.name,self.colour,self.age)

dog=Animal('小狗','白色','2')
dog.eat()
dog.run()
print(dog)
print('*'*20)
cat=Animal('小猫','花色','1')
cat.eat()
cat.run()
print(cat)
【小狗】 在吃东西
【小狗】 在奔跑
【小狗】的颜色是:白色,2岁了
********************
【小猫】 在吃东西
【小猫】 在奔跑
【小猫】的颜色是:花色,1岁了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值