Python——面对对象使用、封装、继承

一、面向对象(OOP)的基本概念

(1)过程和函数

  • 过程是早期的一个编程概念;
  • 过程类似于函数,只能执行,但是没有返回值;
  • 函数不仅能执行,还可以返回结果;

(2)面向过程----怎么做

  1.  把完成某一个需求的所有步骤从头到尾逐步实现
  2.  根据开发需求,将某些功能独立的代码封装成一个又一个函数;
  3.  最后完成的代码,就是顺序地调用不同的函数。

        特点:
        1. 注重步骤与过程,不注重职责分工;
        2. 如果需求复杂,代码会变得很复杂;
        3. 开发复杂项目,没有固定的套路,开发难度很大!

(3)面向对象----谁来做

  1.  在完成某一个需求前,首先确定职责——要做的事情(方法);
  2.  根据职责确定不同的对象,在对象内部封装不同的方法(多个);
  3.  最后完成的代码,就是顺序地让不同的对象调用不同的方法。

以植物大战僵尸为例,僵尸以及植物等有如下性质:

(4)类和对象的概念

是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。
特征被称为属性,行为被称为方法;

对象是由类创建出来的一个具体存在,可以直接使用。
由哪一个类创建出来的对象,就拥有在哪一个类中定义的属性和方法。

(5)类和对象的关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象

类只有一个,而对象可以有很多个。

不同的对象之间属性可能会各不相同。

类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少。

(6)类的设计

要设计一个类,通常需要满足一下三个要素:
1. 类名:这类事物的名字,满足大驼峰命名法,见文知意;
2. 属性:这类事物具有什么样的特征;
3. 方法:这类事物具有什么样的行为;

class TheFirstDemo:
    '''这是一个学习Python定义的第一个类'''

    # 构造方法
    def __init__(self):
        print("调用构造方法")

    # 下面定义了一个类属性
    add = 'hahahaha'

    # 下面定义了一个say方法
    def say(self, content):
        print(content)


if __name__ == "__main__":
    result = TheFirstDemo()

二、面向对象(OOP)的使用

(1)定义类

class 类名:

    def 方法1(self,参数列表):

        动作

    def 方法2(self,参数列表):

        动作

(2)创建对象

对象变量 = 类名()

练习:

需求:学生爱学习,学生爱跑步。

class Student:

    def study(self):
        print("我爱学习")

    def run(self):
        print("我爱跑步")

student01 = Student()
student01.study()
student01.run()

关于self:

由哪一个对象调用的方法,方法内的self就是哪一个对象的引用。

调用方法时,不需要传递self参数。

在方法内部,可以通过self访问对象的属性,也可以通过self调用对象的其它方法。

不推荐在类的外部给对象增加属性(对象包含哪些属性,应该封装在类的内部)。

例如:

student01.name = "张三"

(3)初始化方法

当使用 类名() 创建对象时,会自动执行初始化方法__init____init__是对象的内置方法。

在 Python 中,__init__ 也叫“构造器(Constructor)”。

__init__ 即“initialize(初始化)”,它的作用是将类的属性分配给每个对象

例如:

class Student:
    def __init__(self):
        print("初始化一个学生")

student01 = Student()

(4)在初始化方法内部定义属性

在__init__方法内部使用  self.属性名=属性的初始值  可以定义属性,

定义属性后,再使用类创建对象,该对象就会拥有该属性。

例如:

class Student:
    def __init__(self):
        print("初始化一个学生")
        self.name = "张三"

    def study(self):
        print("%s爱学习" %self.name)

student01 = Student()
student01.study()

(5)初始化的同时设置初始值

把希望设置的属性值,定义成__init__方法的参数;

在方法的内部使用 self.属性=形参 接收外部传递的参数;

在创建对象时,使用 类名(属性1,属性2......)调用。

例如:

class Student:
    def __init__(self, input_name):
        self.name = input_name

    def study(self):
        print("%s爱学习" % self.name)

student01 = Student("张三")
student01.study()

(6)__del__方法

如果希望对象在销毁前做一些事情,可以用__del__方法。

例如:

class Student:
    def __init__(self, input_name):
        self.name = input_name
        print("我是%s" %self.name)

    def __del__(self):
        print("我消失了")

student01 = Student("张三")

(7)__str__方法

在python中,使用print输出对象变量时,默认情况下,会输出这个变量是由哪个类创建的对象,以及在内存中的地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以用__str__这个内置方法。

(注意:__str__方法必须返回一个字符串)

例如:

class Student:
    def __init__(self, input_name):
        self.name = input_name
        print("我是%s" %self.name)

    def __del__(self):
        print("我消失了")

    def __str__(self):
        return "%s同学" % self.name


student01 = Student("张三")

print(student01)

三、面对对象封装

1. 封装是面向对象编程的一大特点;
2. 面向对象编程的第一步 —— 将属性和方法封装到一个抽象的类中;
3. 外界使用类创建对象,然后让对象调用方法;
4. 对象方法的细节都被封装在类的内部;

练习:创建对象张三和李四,观察张三李四学习和玩对各自成绩的影响。

需求分析:

1. 学生张三李四

2. 张三成绩60分,李四成绩70分

3. 每次学习成绩增加5分

4. 每次打游戏学习成绩减少5分

class Student:

    def __init__(self, input_name, input_score):

        self.name = input_name

        self.score = input_score

        print("创建对象!%s的默认成绩是:%.1f" % (input_name, input_score))



    def study(self):

        print("%s努力学习一下!"%self.name)

        self.score = self.score + 5



    def play(self):

        print("%s偷玩一下!"%self.name)

        self.score = self.score - 5



    def __str__(self):

        return "%s的成绩是%.1f" % (self.name, self.score)





stu01 = Student("张三", 60)

stu02 = Student("李四", 70)



stu01.study()

print(stu01)



stu02.study()

print(stu02)



stu01.study()

print(stu01)



stu02.study()

print(stu02)



stu01.play()

print(stu01)



stu02.play()

print(stu02)

四、self

self 在定义类的方法时必须存在。

self 的作用是将类的方法分配给每个对象

self 即“itself”,指类本身。

class student:

  def __init__(self, new_name):
    self.name = new_name


  def print_name(self):
    print("名字为:%s" % self.name)


stu01 = student("张三")
stu01.print_name()
stu02 = student("李四")
stu02.print_name()

输出结果:

 

五、继承

继承的语法:

class ClassName(baseclass):

    statement

ClassName指的是子类或派生类名字,baseclass指的是父类或基类。


class person:
    def print_info(self,input_name):
        print("姓名是:"+input_name)

# student继承person
class student(person):
    def __init__(self):
        print("我是学生")

# teacher继承person
class teacher(person):
    def __init__(self):
        print("我是老师")

# 调用父类的方法
per01 = student()
per01.print_info("张三")

# 调用父类的方法
per02 = teacher()
per02.print_info("李四")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值