• 第十九天:类和对象


    面向对象编程

    面向过程编程

    面向过程编程注重的是步骤,知道先做什么,后做什么,所以面向过程编程的优点就是逻辑清晰,把复杂的问题流程化,进而将它简单化。缺点是它的可拓展性比较差。

    对象

    在现实中对象可能就是指的是一个一个的物体,在编程中,对象指的是某种特征和技能的结合体

    面向对象编程

    相比于面向过编程,面向对象编程更注重的对象,这种编程思想就好比是上帝在造物体,是基于上帝的思想进行编程

    所以面向对象编程的优点是它的可拓展性比较高,而缺点就是面向对象编程更加复杂

    在未来的使用中,要结合两种编程思想才能更好的进行编程

    什么是类

    知道了面向对象编程,就要知道什么是类,

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

    怎么定义类

    在编程中,要想使用对象就要现有类,定义类就要使用class关键字

    定义方式类就是class关键字后面加类名再加冒号:

    # 定义一个学生类
    class Student:
    	pass
    
    

    要注意的是,在命名类的时候要使用驼峰体

    其中类名不仅仅是类的名字,还要通过它去创造对象。

    定义类发生的事

    1.类在定义时,会产生一个空的名称空间

    2.会把类中所定义的所有的名称全部放入这个名称空间中。

    与函数不同的事,类在定义阶段就已经产生了名称空间,执行python文件会执行类内部的代码

    类的操作

    首先定义一个学生类

    class Student:
        # 特征
        school = 'zwu'
        # 技能
        def learn(self)
        	print('I love study')
        def choose_class(self)
        	print('I want learn python')
            
    
    print(Student)
    print(Student.__dict__)
    print(Student.__dict__.get('school'))
    print(Student.school)
    # <class '__main__.Student'>
    # {'__module__': '__main__', 'school': 'zwu', 'learn': <function   Student.learn at 0x0000027C4669F0D0>, 'choose_class': <function   Student.choose_class at 0x0000027C4669F158>, '__dict__':   	   <attribute '__dict__' of 'Student' objects>, '__weakref__':       <attribute '__weakref__' of 'Student' objects>, '__doc__':    	   None}
    # zwu
    # zwu
    

    Student.adderss = 'nb'
    print(Student.adderss) # nb
    
    # Student.__dict__['address'] = 'nb'
    # print(Student.__dict__['address'])
    
    

    del Student.adderss
    print(Student.adderss)
    # AttributeError: type object 'Student' has no attribute 'adderss'
    
    # del Student.__dict__['school']
    # print(Student.__dict__['school'])
    

    print(Student.adderss)
    # print(OldboyStudent.__dict__.get('school'))
    

    Student.address = 'yz'
    print(OldboyStudent.school)
    

    对象

    再次重复一遍,对象就是特征和方法的结合体

    对象的产生

    语法是用类名+括号()调用类产生对象

    对象名称空间的产生

    类的名称空间在类定义的时候就已经产生,于此相似,对象的名称空间在调用类的时候就已经产生

    __init__的使用

    我们在使用类名+()产生对象时,你会发现这样调用生成的对象的属性都是差不多的,这样我们就可以使用__init__函数

    __init__会在调用类时,自动触发该函数,作用是给对象初始化某些属性

    class Studen:
        school = 'zwu' 
        def learn(self):
            print('learn')
        def __init__(self,name,age,sex): 
            self.name = name
            self.age = age
            self.sex = sex
        # def __init__(self):
            # print('this is __init__')
    stu1 = Studen('lk',15,'meal')
    print(stu1.name)
    # stu1 = Studen()
    # stu1.name = 'lk'
    # stu1.age = 15
    # print(stu1.__dict__)
    stu2 = Studen('zz',18,'femeal')
    print(stu2.__dict__)
    
    

    我们可以给__init__函数中给些参数,这样在生成的对象中也会有这些属性

    调用类发生的事情

    调用类发生的事情
    1.首先会产生一个空的对象,就是产生“对象的名称空间”
    2.会自动触发__init__函数
    3.会把对象本身以及括号内的参数一并传给__init__函数
    总结: 调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例

    对象与类的查找顺序

    class Studen:
        SCHOOL = 'zwu' 
        NAME = 'll'
        def learn(self):
            print('learn')
        def __init__(self,name,age,sex,school): 
            self.name = name
            self.age = age
            self.sex = sex
            self.SCHOOL = school
    stu1 = Student('lk',15,meal,'zzu')
    print(stu1.SCHOOL)
    # zzu
    

    从代码中我们可以看到,即使在类中定义了一个school,但是得到的结果是定义对象时传的值,所以对象与类的查找顺序:
    1.对象.属性,若对象本身有,则优先查找对象自己的。
    2.若对象本身没有,则去类里面找,若类没有,则报错。

    对象绑定方法的特殊之处

    我们都知道在类里面会有对象的特征和技能,这个技能可以是一个函数,在定义这个函数的时候,他会自动生成一个参数self,这个函数的特殊之处就在这个self上

    class Studen:
        school = 'zwu' 
        def learn(self):
            print('learn')
        def __init__(self,name,age,sex): 
            self.name = name
            self.age = age
            self.sex = sex
    stu1 = Studen('lk',15,'meal')
    stu2 = Studen('zz',18,'femeal')
    stu1.learn()
    Student.learn(0)
    

    这里可以发现在使用对象调用函数的时候它可以不给参数

    而类调用的使用则在里面给了一个参数(这个参数可以是任意的)

    着就引出了这个特殊之处:

    类内部的函数主要是给对象用的:

    当由类调用类内部函数时,该函数就只是一个普通函数,普通函数需要几个参数,就要传几个参数

    当对象调用类内部函数时,该函数就可以称为对象的绑定方法,不同的对象调用该绑定方法,则会将不用的对象传如该方法中

    特殊之处就是:把对象当作第一个参数传给该方法中

    python中一切皆对象

    目前我刚刚接触对象,还并不了解它的目的,不知道它都能做些什么

  • 相关阅读:
    Linux账户密码安全策略设置 /etc/login.defs:
    GPS网络时间服务器安装注意事项
    ntp时间校准服务器的调试方法
    北斗网络时钟服务器的特点
    sntp时间服务器的介绍
    网络校时服务器
    综合时间码分配器介绍
    子母钟系统介绍
    智能计数器简介
    怎样选择通用计数器?
  • 原文地址:https://www.cnblogs.com/lyyblog0715/p/11643613.html
Copyright © 2020-2023  润新知