zoukankan      html  css  js  c++  java
  • 面向对象OPP

     
    在此之前学习的编程方式均称为面向过程,过程类似于函数,只能执行,没有返回值
    面向过程和面向对象
    面向过程-->怎么做?
    面向对象-->谁来做?
    相比函数,面向对象 是更大的封装,根据职责在一个对象中封装多个方法
     
    面向对象的三大特性:
    封装:根据职责将属性和方法封装到一个抽象的类中
    继承:实现代码的重用,相同的代码不需要重复编写
    多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活性
     
    类和对象
    定义:
    类是一群具有相同特征(即属性)或者行为(即方法)的事物的一个统称,是抽象的,不能直接使用
    对象 是有类创建出来的一个具体的存在,可以直接使用
    由哪一个类创建出来的对象,就拥有在哪一个类中定义属性和方法
    类与对象的关系:
    • 在程序开发中,先有类,在有对象
    • 类只有一个,对象可以有很多个。在内存的保存地址是不一样
    • 不同对象之间属性可能会不相同
    • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多也不可能少
    打个比方:类就像是创建飞机的图纸,不能飞,就是一个模板,对象就是根据图纸制造出来的飞机
     
     
    类的设计
    三要素:
    类名:一类事物的名称,满足大驼峰命名法(每一个首字母都是大写,单词与单次之间没有下划线)
    属性:这类事物有什么特征
    方法:这类事物有什么行为
     
    dir内置函数(科普)
    作用:使用内置函数dir传入标识符或数据。可以查看对象内所有属性和方法
    在Python中,看到格式为 __方法名__ 就是Python提供的内置方法/属性
    查看方式:进入ipython 输入dir("abc")
     
    定义类
    格式:
    class 类名:
    def 方法1(self,参数列表):
    pass
    def 方法2(self,参数列表):
    pass
     
    创建对象
    当一个类定义完成后,需要使用这个类来创建对象
    语法格式:
    对象变量 = 类名 ()
    对象在内存中存储的地址用十六进制表示
     
    方法中self参数
    给对象增加属性:对象.属性名 利用赋值语句就可以
    利用self在类封装的方法可以输出输出属性值
    由哪一个对象调用的方法,方法内部的self就是哪一个对象的引用
    # 需求:小猫爱吃鱼,小猫要喝水
     
     
    定义一个猫类 cat
    定义两个方法 eat 和drink
    按照需求不需要定义属性
     
    # 创建类
    class Cat:
    def eat(self):
    print ( "小猫爱吃鱼" )
    def drink(self):
    print ( "%s 爱喝水,年龄是 %d" % (self.name, self.age) ) --》这种方法一般不推荐
    # 创建对象
    tom = Cat ()
    amy = Cat ()
    tom.age = 2
    tom.name = "大懒猫"
    tom.drink ()
    

      

    对象初始化方法
    当时用类名() 创建对象时,会自动执行一下操作:
    • 为对象在内存中分类空间----创建对象
    • 为对象的属性设置初始值----初始化方法(init)
    class Cat:
    def __init__(self):
    print("这是一个初始化方法")
     
    self.name=“大懒猫”
     
    tom=Cat()
    与上述练习的例子相比,如果上述代码不写tom.drink() 是没有输出的,对比下面创建了对象就会有输出
     
    在初始化方法中定义属性
    使用方式: self.属性名=属性的初始值,如上self.name=“大懒猫”
    使用参数设置属性的初始值
    class Cat:
    def __init__(self,name):
    self.name = name #在方法内部使用self.name=形参 接收外部传递的参数
    def eat(self):
    print("%s 爱吃鱼" % self.name)
     
    tom=Cat("大懒猫") #在创建对象时,使用类名(属性1,属性2...)调用
    tom.eat()
     
    del方法和对象的声明周期
    当一个对象从使用一个 类名( ) 创建,对象的生命周期开始
    一个对象的 __del__ 方法,一旦被调用,生命周期结束
    在对象的生命周期内,可以访问对象的属性,或者对象调用方法
     
    __str__方法
    __str__方法必须返回一个字符串
    利用该方法可以打印自定义内容
     
    如果没有__str__方法,针对上述的例子中 print(tom)打印对象输出的信息如下:
    <__main__.Cat object at 0x01E51330>
    所以在__str__方法中必须要有返回的字符串信息
    格式如下:
    class Person ():
    def __init__(self, name, weight):
    self.name = name
    self.weight = weight
     
    def __str__(self):
    return "我的名字叫 %s,体重是 %.2f 公斤" % (self.name, self.weight)
    

     注意:在init方法中定义的变量在后续的方法中均可以调用

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    new操作符
    delete和delete[] 的区别
    oracle查看编码以及修改编码
    C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
    error:/usr/bin/ld:skipping incompatible ./libxxxx.so when searching for lxxxx
    shell环境变量以及set,env,export的区别
    malloc/free和new/delete的区别
    form表单提交回调函数
    jQuery ajax 跨域请求
    开博咯
  • 原文地址:https://www.cnblogs.com/wysk/p/11297116.html
Copyright © 2011-2022 走看看