zoukankan      html  css  js  c++  java
  • 一个初学者的辛酸路程-面向对象-7

    前言:

    轮对象的重要性

    主要内容:

    面向对象编程:
    OOP编程,模板和实际的对象来创建各种模型
     
    class类:
    就是模板
    先写一个模板的原因是,后面会创建多个人,只是想传几个参数来创建多个人。这样大多数功能就不需要重写了。
    类,就是对类拥有相同属性的对象的抽象,蓝图,原型。
    每个对象可以有不同的属性。
     
    手把手教你写一个简单的类
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author: Leon xie
    
    
    #类名,这个是必写的定义,简单的定义
    #就像定义了一个函数,只是定义了它,不调用它不生效
    class Dog(object):
       # print("hello,I am a dog.")
    
        #实例化完了以后,单独写一个功能,功能写在嵌套里面
        def sayhi(self):
           print("hello,I am a dog.")
    
    #类是一个模板,写了一个模板,要把它实例化
    d = Dog()
    #内存对象有了,但是我没调用
    #print(d)
    
    #调用
    d.sayhi()

    打印结果

    hello,I am a dog.

     说明:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author: Leon xie
    
    
    #类名,这个是必写的定义,简单的定义
    #就像定义了一个函数,只是定义了它,不调用它不生效
    class Dog(object):
       # print("hello,I am a dog.")
        def __init__(self,name):  #构造函数,构造方法 == 初始化方法
            self.NAME = name
    
        #实例化完了以后,单独写一个功能,功能写在嵌套里面
        def sayhi(self):  #类的方法
            #类通过函数平起来的,实例化吧lichuang传给了init,但是我
            #这个地方调不到上面的函数
           print("hello,I am a dog.my name is ",self.NAME)
    
        def eat(self,food):
            print("%s is eating %s" %(self.NAME.food))
    
    #类是一个模板,写了一个模板,要把它实例化
    d = Dog("lichuang")
    #内存对象有了,但是我没调用
    #print(d)
    d2 =Dog("chuang2")
    #调用
    d.sayhi()
    d2.sayhi()
    
    #我无法区分是哪条狗,所以要传点参数区分
    
    #类是一堆函数的组合,打通函数见甭能互相调用的问题
    #没实例化,上面定义的类是存在的,以模板形式
    #实例化后的对象我们叫做实例,当前类的实例
    
    #self就是实力本身,
     
    类的特性
    封装
              防止数据被随意修改。
              使外部程序不需要关注对象内部的构造,只需要通过对象对外提供的接口进行直接访问即可。
     
    继承
              通过父类- 》子类的方式实现 不同角色的共同点和不同点
     
     
    开发中避免写重复的代码,否则就相当于给自己挖坑。
    函数的出现,就帮我们解决了重复代码的问题。
    其实OOP编程的主要作用也是
    1、代码量少了一半
    2、角色和它所具有的功能一目了然
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #Author: Leon xie
     
    class Dog(object):
        def __init__(self,name):     #构造函数,构造方法 == 初始化方法
            self.NAME = name
     
        def sayhi(self):    #类的方法   ,写self原因是把实例本身传进来
            print("hello,I am a dog.my name is",self.NAME)
    '''
    先实例化,然后在调用功能
    '''
    d = Dog("alex")
    d2 = Dog("LiChuang")
    d.sayhi()
    d2.sayhi()
    
     
    打印结果
     
    hello,I am a dog.my name is alex
    hello,I am a dog.my name is LiChuang
    self相当于d,d就是实例化后的对象,实例化后产生的对象,叫做实例。当前类的实例。
    self就是d,所以self就是实例本身,你生成哪个对象self就是谁
     
    模板如下:
     
    继承
         通过父类->子类的方式以最小代码量的方式实现不同的角色
     
    面向对象的特性:
    封装
     
    类==>实例化==》实例对象
    __init__构造函数
     
    self.name = name #属性,成员变量
     
    def sayhi()  #方法,动态属性
     
    共有属性和私有属性
    __private_attr_name = value
    只能内部访问,外部不能访问
    def  get_heart(self):  #对外部提供只读访问接口
              return  self.__heart
     
    强制访问
    r1._Role__heart  强制访问私有属性
    公有属性指所有属于我这个类的对象都可以访问
    有多少个对象实例化了我都可以访问的属性 
    在类里直接定义的就是共有属性
     
     
    继承
         当同一类的对象,有共同属性,又有不同属性的时候,搞一个分类,搞2个子类分别继承。
     
    OO开发范式大致为:
    划分对象--> 抽象类-->将类组织成为层次化结构(继承和合成)
     
     接下来需要明白的几个问题:
    1、什么是面向对象编程?
    用类和对象来实现功能、
    以前都写成一个函数,赋予这个函数功能,它帮我完成
     
    2、什么是类,什么是对象,又有什么关系?
    class 类:
              def  函数1():
                    pass
              def  函数2():
                   pass
     
    #obj是对象,实例化的过程
     
    obj = 类()
    obj.函数1()
     
    有时候,函数编程能实现?比较麻烦,用面向对象非常的简单能实现。
     
    3、什么时候适用面向对象?
         - 如果多个函数需传入多个共用的参数时
         - 根据一个模板创建某些东西
         - 应用场景:
     
    4、self 就是调用当前方法的对象
      
    class  Foo:
             def __init__(self,name):
            self.NAME = name
         def bar(self):
            pass obj1
    = Foo() obj1.bar() obj2 = Foo() obj2.bar()

    静态字段的使用场景,每个对象中保存相同的东西的时候,可以使用静态字段。

    5、封装?

    相当于创建了容器,容器用来装东西,比喻成内存里的一块地址,我把一堆东西放在类里面。

    可以说成:类中封装了字段和方法

    对象中封装了普通字段的值

     6、
    字段:
      普通字段(保存在对象中)
      静态字段(保存在类中)
    方法:
      普通方法(保存在类中,调用者对象)
      
      静态方法(保存在类中,调用者类(无需创建对象),可以有任意个参数)
     
     
     
     
  • 相关阅读:
    C语言-第32课
    typeof和clamp
    C语言void*和*p的使用
    C语言二级指针和一级指针
    C语言结构体变量成员之指针变量成员的坑
    控制硬件三部曲
    C语言const char*使用
    jiffies是什么
    TPO3-1 Architecture
    相关关系|相关系数|线性关系|
  • 原文地址:https://www.cnblogs.com/jixuege-1/p/6102842.html
Copyright © 2011-2022 走看看