zoukankan      html  css  js  c++  java
  • 面向对象初介绍

    今天的学习内容:面向对象的概念、类和对象的概念、如何创建类和对象、如何设计属性、属性的查找顺序、初始化方法以及绑定方法与非绑定方法

    面向对象概念

    提问:什么是面向对象?

    答:面向对象是一种编程的思想,它的核心是对象,而程序则是一系列对象的集合,程序员负责调度这些对象来交互从而完成任务。

    面向对象的优缺点:

    优点

    1、扩展性:方便对程序进行扩展,而且当你在对一个对象进行修改的时候不会对其它对象产生影响,而且修改的结果会很快反映到整个体系中。

    2、灵活性:不用和面向过程一样对整体大动干戈。

    3、重用性:对象可以进行重复调用。

    缺点:

    1.程序的复杂度提高了:对于新手容易出现过度设计的情况,而在扩展性要求比较低的情景下使用也会增加编程难度。

    2.无法预知准确的结果:面向对象是用过对象之间的交互来解决问题,所以不能够预知解决问题的过程,也不能预知准确的结果。

    使用场景:

    对于扩张性要求比较高的程序,通常直接面向用户的:QQ、微信等

    注意:面向对象和面向过程的编程使用一定要根据分析具体的需求来确定。

    类和对象概念

    类:类就是类型,是一种抽象的概念,也就具备相同特征和相同行为的事物的集合。

    对象:就是具体的某个事物,具备它自己的特征与行为,可以看做特征和技能的结合体。

    类和对象的关系:类包含一系列对象,对象属于某个类

    #先有类还是先有对象
    """
    在实际生活中:先有对象后有类
    在现实生活中各种各样的事物是具体存在,而我们根据他们的很多相同的特点将它们划分为统一类,但事实上事物是具体存在的,而类只是一个概念,并没有实际存在
    
    
    在程序中:务必保证先定义类,后产生对象
    这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类,不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象
    """

    总结:我们在使用面向对象编程时,第一步需要思考需要什么样的对象,这些对象我们需要它具备什么样的特征和行为,然后我们根据这些信息得出我们所需要的类型。

    如何创建类和对象

    #定义类的名称
    class 类的名称:
            # 类的内容描述属性和技能
            # 描述属性用变量
            # 描述行为用函数
    
    #类的名称 书写规范:首先需要见名知意,然后名称是用大驼峰命名法
    #大驼峰就是单词第一个字母大写,小驼峰就是第一个字母小写
    #创建对象的语法
    class Person:
        pass
    
    #创建对象
    p = Person()如何设计属性、属性的查找顺序
    #总结:类和对象的定义与调用模式
    class 类名:
        def __init__(self,参数1,参数2):
            self.对象的属性1 = 参数1
            self.对象的属性2 = 参数2
    
        def 方法名(self):pass
    
        def 方法名2(self):pass
    
    对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西               
    对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可
    对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可
    self:在实例化时自动将对象/实例本身传给__init__的第一个参数

    如何设计属性、属性的查找顺序

    属性可以写在类中,也可以写在对象中

    类中的属性是所有对象公共的,对象中的属性是每个对象独特的(不一样的)

    查找顺序:“如果类中和对象中存在同样的属性,先访问对象,如果没有再访问类。

    #增加属性 
    对象变量名称.属性名称 = 属性值
    
    #删除属性
    del 对象的变量名称.属性名称 
    
    #修改 
    对象.属性 = 新的值 
    
    #查看属性  访问的是对象的所有属性 
    print(对象.__dict__)
    
    #访问对象的类信息
    print(对象.__class__)
    一:我们定义的类的属性到底存到哪里了?有两种方式查看
    dir(类名):查出的是一个名字列表
    类名.__dict__:查出的是一个字典,key为属性名,value为属性值
    
    二:特殊的类属性
    类名.__name__# 类的名字(字符串)
    类名.__doc__# 类的文档字符串
    类名.__base__# 类的第一个父类(在讲继承时会讲)
    类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
    类名.__dict__# 类的字典属性
    类名.__module__# 类定义所在的模块
    类名.__class__# 实例对应的类(仅新式类中)

    初始化方法

    __init__方法:初始化方法,本质上就是一个函数

    特点1:当实例化对象时,会自动执行__init__方法。

    特点2:会自动将对象作为第一个参数传入,参数名称位self,self可以是别的名字,但是不建议改。

    功能:用户给对象赋初始值

    class Dog:
        def __init__(self,kind,color,age):
            self.kind = kind
            self.color = kind
            self.age = age
    
    d1 = Dog('二哈','黑白',1)
    d2 = Dog('泰迪','棕色',2)
    print(d1.__dict__)  # {'kind': '二哈', 'color': '二哈', 'age': 1}
    print(d2.__dict__)  # {'kind': '泰迪', 'color': '泰迪', 'age': 2}
    
    #注意,该函数不能有任何返回值,只能是None
    #为对象定制一个行为
    #就是在类中创建一个函数
        def say_hi(self):
            
            print("hello i am a student! my name:%s" % self.name)
    #传入self,可以在其中调用self的属性

    绑定与非绑定方法

    默认情况下类中的方法都是对象绑定方法,特殊的地方在以下两点:

    当使用对象调用该函数时会自动传入对象本身,作为第一个参数

    当使用类名来调用时他就是一个普通函数,有几个参数就得传几个参数

    class Student:
        school = "oldgirl"
        def __init__(self,name,age,gender):
            self.name = name
            self.age = age
            self.gender = gender
    
        def say_hi(self):
            print("hello i am a student! my name:%s" % self.name)
    
    
    
    stu1 = Student("jack",20,"male")  # 使用对象调用该函数,会自动传入
    stu1.say_hi()
    Student.say_hi(stu1) # 使用类来调用,就是一个普通函数,有几个参数就传几个

    类绑定方法

    类绑定方法用@classmethod来装饰

    特殊之处:不管用类还是对象调用,都会自动传入类本身,作为第一个参数

    class OldBoyStudent:
        school = "oldboy"
    
        def __init__(self,name):
            self.name = name
    
        @classmethod
        def show_school(cls):
             print(cls)

    OldBoyStudent.show_school() # <class '__main__.OldBoyStudent'>
    print(OldBoyStudent) # <class '__main__.OldBoyStudent'>

    什么时候绑定给对象:当函数逻辑需要访问对象中的数据时

    什么时候绑定给类:当函数逻辑需要访问类中的数据时

    非绑定方法

    或叫做静态方法,就是即不需访问类的数据,.也不需要访问对象的数据

    语法:@staticmethod

    不常用

      @staticmethod
        def print_hello():
            print("hello world")

     总结

    类与对象

    对象的本质是一个容器/名称空间,用来存放对象特有的属性。

    类的本质也是一个容器/名称空间,用来存放对象相同的属性。

    类的用途有两种:

    1.当容器使用时,用来存放类的数据属性和类的函数属性

    2.调用类的过程,也就是实例化,产生的结果是对象。

    (实例化过程:①先产生一个空对象②触发__iniit__(空对象,arg1,arg2...))

  • 相关阅读:
    获取Finacial dimension value的description 值
    创建一个List获取数据的lookup
    定位form光标行
    Business Unit Lookup in Form
    Linu各种版本
    redis的具体使用
    php中date()函数使用的方法
    Spring整合Hibernate中自动建表
    Android之手机电池电量应用
    SSH整合时,关于访问数据库的load的错误
  • 原文地址:https://www.cnblogs.com/wangnanfei/p/11241363.html
Copyright © 2011-2022 走看看