zoukankan      html  css  js  c++  java
  • 类的定义和使用

    类的定义:Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等功能。

    类的三大核心特性:封装、继承、多态。

    封装:在类里面数据属性和行为用函数的形式封装起来,访问时直接调用,不需知道类里面具体的实现方法;封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

    示例:

    #!/usr/bin/env python
    class People(): #定义类
        def __init__(self,name,age): #构造函数,初始化类的属性
            self.name=name
            self.age=age
        def info(self): #声明一个info方法
            print("%s is %s year old"%(self.name,self.age))
    
    p=People("Peter",25) #类的实例化
    p.info()  #调用类方法
    输出:
    Peter is 25 year old
          

    继承:继承原有类的所有方法,实现代码的重用。

    继承的大致逻辑: 抽象(抽取类似或比较像的部分)==>继承(子类继承父类的方法和属性)==>派生(子类在父类的方法和属性的上添加新的方法和属性)

    示例:

    #!/usr/bin/env python
    class People():
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def info(self):
            print("%s is %s year old"%(self.name,self.age))
    class Man(People): #继承类
        def __init__(self,name,age,sex): #初始化类的属性
           super().__init__(name,age) #声明继承父类的属性
           self.sex=sex
        def man_info(self):
           print("%s is a %s"%(self.name,self.sex))
    m=Man('Peter',25,"boy")
    m.info()
    m.man_info()
    输出:
    Peter is 25 year old 
    Peter is a boy

    多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

    #!/usr/bin/env python
    class Animal():
        def __init__(self,name):
            self.name=name
        def talk(self):
            print("i'm %s"%self.name)
    class People(Animal):
        def __init__(self,name):
            self.name=name
    class Dog(Animal):
        def __init__(self,name):
            self.name=name
    P=People("human")
    P.talk()
    D=Dog("Dog")
    D.talk()
    输出:
    i'm human
    i'm Dog

    如何理解面向过程和面向对象?

        面向过程就是分析出解决问题所需要的步骤,然后通过函数把这些步骤一步一步实现,使用的时候一个个依次调用。
        优点:极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码。
        缺点:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

        面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
        优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
        缺点:可控性差,无法向面向过程的程序设计一样流水线式,不能精准的预测问题的处理流程与结果。

        面向过程的思维方式是分析综合。面向对象的思维方式是构造。

    赠人玫瑰,手有余香,如果我的文章有幸能够帮到你,麻烦帮忙点下右下角的推荐,谢谢!

    作者: imcati

    出处: https://www.cnblogs.com/imcati/>

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

  • 相关阅读:
    康复计划
    Leetcode 08.02 迷路的机器人 缓存加回溯
    Leetcode 38 外观数列
    Leetcode 801 使序列递增的最小交换次数
    Leetcode 1143 最长公共子序列
    Leetcode 11 盛水最多的容器 贪心算法
    Leetcode 1186 删除一次得到子数组最大和
    Leetcode 300 最长上升子序列
    Leetcode95 不同的二叉搜索树II 精致的分治
    Leetcode 1367 二叉树中的列表 DFS
  • 原文地址:https://www.cnblogs.com/imcati/p/9501640.html
Copyright © 2011-2022 走看看