zoukankan      html  css  js  c++  java
  • python-面向对象入门

    一、面向对象介绍

    介绍面向对象之前,先来回顾一下以前学的面向过程的编程思想

    面向过程编程:

      核心是过程二字,过程指的是解决问题的步骤,即先干什么,再干什么后干什么,基于该思想编程就好比是在设计一条流水线,是一种机械化的思维方式

      优点:复杂的问题流程化,进而简单化

      缺点:可扩展性差

    现在轮到面向对象的编程思想了!

      面向对象编程,核心是对象二字,对象是特征与技能的结合体,基于该思想编写程序(脑子里始终想的是对象二字),就好比创造一个世界,在上帝眼里任何存在的事物都是对象,任何不存在的事物都可以造出来,是一种上帝式的思维方式

      优点:可扩展性强

      缺点:编程的复杂度要高于面向过程

    二、类

    对象是特征与技能的结合体,而类则是一系列对象相同的特征与技能的结合体

    强调:

      1.对象是具体存在的事物,而类则是一个抽象概念

      2.站在不同的角度总结出的类与对象是不同的

    在现实世界中,先有一个个具体存在的对象,然后随着人类文明的发展才总结出类的概念

    在程序中,先定义类,后调用类来产生对象

    类体中最常见的就是变量和函数的定义,但类体中可以存在任意的python代码。

    定义类:

    class语句创建一个新的类的定义,后面跟着冒号“:”

    class Student:
        #相同的特征
        school = 'superschool'
        #相同的技能
        def choose_course(self):
            print('choosing course')

    类体代码会在类定义阶段立即执行,会产生一个类名称空间,用来将类体代码都丢进去。

    查看类的名称空间:

    print(Student.__dict__) 

    修改,添加,删除

    Student.school = 'SUPPER'
    Student.country = 'China'
    del Student.country

    总结类:

      1.类本质上就是一个名称空间,或者说是一个用来存放变量和函数的容器

      2.类的用途之一就是当做名称空间从其内部取出名字来使用

      3.类的用途之二就是调用类来产生对象

    对象:

    调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例

    stu1 = Student()

    为对象定制自己独有的特性:

    stu1.name='李铁蛋'
    stu1.age=18
    stu1.sex='male'
    stu2.name='赵钢弹'
    stu2.age=38
    stu2.sex='female'

    大家也注意到了,这里存在了冗余代码,我们来优化一下

    def init(obj,name,age,sex):
        obj.name = name
        obj.age = age
        obj.sex = sex

    产生的对象通过每次调用函数能够更简便,还有没有更好的方法呢?答案肯定是有的

    class Student:
        #相同的特征
        school = 'oldboy'
    
        #           stu1,'李铁蛋',18,'male'
        def __init__(obj, name, age, sex):
            obj.name = name #stu1.name='李铁蛋'
            obj.age = age   #stu1.age=18
            obj.sex = sex   #stu1.sex='male'
    
        #相同的技能
        def choose_course(self):
            print('choosing course')

    调用类会先产生一个空对象stul,然后返回,触发类中的__init__的执行,将对象连同调用类括号里指定的参数一同传入

    stu1=Student('李铁蛋',18,'male') #__init__(stu1,'李铁蛋',18,'male')
    stu2=Student('赵钢弹',38,'female') #__init__(stu2,'赵弹',38,'female')

    总结__init__的功能:是在实例化时就为对象初始自己独有的属性,要注意的是不能有返回值,默认返回None

    属性查找:

      1.先从对象自己的名称空间中找,没有则去所属的类中找

      2.类中定义的变量是所有对象共享的,对象可以用来用,类也可以来使用,类一旦改变自己的数据属性的值,所有对象都能感知到。

    绑定方法:

      类中定义的函数是是类的函数属性,类可以用,类调用就是一个普通函数,但其实类中定义的函数是给对象用的,而且是绑定给对象用的 

      1.类的函数:该传几个参数就传几个

      2.绑定方法,指向类的函数:特殊之处是绑定给谁就由谁来调用,谁来调用就会当做第一个参数自动传入。

    三、一切皆对象

    在python3中统一了类与类型的概念

    class Foo:
        pass
    
    print(Foo)
    obj=Foo()
    print(type(obj))
    
    print(int)
    age=10 #age=int(10)
    print(type(age))
    
    l1=[1,2,3] #l1=list([1,2,3])
    # print(type(l1))
    # l1.append(4)
    # print(l1)
    
    l1.append(4) # list.append(l1,4)
    print(l1)

    l1.append就相当于调用了list类中的append函数

    面向对象后期继续补充,七夕刚好new个对象!

  • 相关阅读:
    推荐7个GitHub上不错的Python机器学习项目
    值得收藏的45个Python优质资源
    9 个鲜为人知的 Python 数据科学库
    小众Python库介绍
    Sebastian Ruder : NLP 领域知名博主博士论文面向自然语言处理的神经网络迁移学习
    学习Python 新去处:Python 官方中文文档
    图像超分辨率项目帮你「拍」出高清照片
    入坑机器学习?听听MIT在读博士的AI心得
    自然语言处理领域重要论文&资源全索引
    旷视等Oral论文提出GeoNet:基于测地距离的点云分析深度网络
  • 原文地址:https://www.cnblogs.com/mangM/p/9493372.html
Copyright © 2011-2022 走看看