美文网首页
day_14类和对象

day_14类和对象

作者: 逆流而上_2eb6 | 来源:发表于2018-10-17 17:27 被阅读0次

    1.面向对象编程

    1.1编程

    1.面向过程编程---->算法,逻辑(数学逻辑)
    2.函数式编程---->函数
    3.面向对象编程---->类和对象(生活)

    2.类的声明

    2.1类的定义

    类是相同属性和相同功能的对象的集合(抽象的)
    对象是类的实例(具体的)
    例如:人(类)成龙(对象)中国人(子类)

    2.2类的声明

    格式:

    class 类名(父类列表):
        类的说明文档
        类的内容
    

    说明:

    class->python中的关键字
    类名-->标识符,不能是关键字;类名使用驼峰式命名,并且首字母大写
        驼峰式命名:如果一个名字由多个单词组成,第一个单词首字母小写,后面的单词首字母大写
        PEP8命名规范:所有字母小写
    (父类列表)-->继承语法,让说明的类继承括号中的父类。这个结构可以省略,让当前类继承python中的基类:object
    类的说明文档-->注释,对类进行说明
    类的类容-->包含属性(存储数据的变量)和方法(函数)
        方法:声明在类中的函数
    
    class Person:
    """人类"""
    def eat(self):
        print("吃饭")
    

    2.3对象的声明

    格式:

    对象名 = 类名()
    对象名 -->变量名
    类名-->必须是声明过的类
    
    p1=Person()
    p2=Person()
    

    3.对象方法

    类的内容包含属性和方法,方法分为对象方法、类方法、静态方法

    3.1对象方法

    直接声明在类中的函数就是对象方法。对象方法都有一个默认参数self,需要使用对象来调用
    对象调用:对象.方法名()。调用对象方法的时候,不需要给self传值,系统会自动将当前对象传递给self。
    self:谁调用当前的对象方法,self就指向谁。self就是当前类的对象,类的对象能做的,self都能做。

    class Person:
        def eat(self):
            print("self:",self)
            self.sleep()
        def sleep(self):
            print("睡觉")
            
    p1 =Person()
    print("p1",p1)
    p1.eat()
    # p1 <__main__.Person object at 0x0000022FF8955FD0>
    # self: <__main__.Person object at 0x0000022FF8955FD0>
    # 睡觉
    

    4.构造方法

    4.1定义

    构造方法就是函数名和类名一样的方法,作用是用来创建对象的。
    声明类时,系统会自动创建构造方法
    创建对象的过程:调用构造方法在内存中开辟空间创建对象,并且会自动调用init方法去对这对象进行初始化;最后将创建好的对象的地址返回

    4.2__init__方法

    对象方法
    不需要手动调用,创建完对象后,会被自动调用

    class Dog:
        def __init__(self):
            print("……")
            
    
    d1 = Dog()
    # ……
    

    4.3带其他参数的init方法

    _init_方法的参数要通过构造方法来传。构造方法的实参会传递给init方法的形参

    class Person:
        def __init__(self,name):
            print(name)
    
    
    p1 = Person("小明")
    #”小明“
    

    5.对象的属性

    类的内容包含属性和方法,属性又分为对象属性和类的字段
    属性:用来在类中去保存数据的变量
    对象属性:属性会因为对象的不同而不同,这种属性就需要声明成对象属性;对象属性要通过对象来使用

    5.1对象属性的声明(重点)

    1.必须声明在_init_方法中
    2.声明的格式:self.属性名 = 初值

    5.2对象属性的使用

    格式:对象.属性

    class Person:
        def __init__(self,name ="小鲜肉"):
            self.name = name
            self.age = 1
            self.sex = "男"
    
    
    p1 = Person()
    p1.name = "小鲜肉1"
    print(p1.name)
    #小鲜肉1
    

    6.对象属性的增删改查

    class Student:
        def __init__(self,name = "",age = 0,stu_id = "001" ):
            self.name = name
            self.age = age
            self.stu_id=stu_id
            
            
    s1 =Student()
    

    6.1查(获取对象的属性的值)

    方法1:对象.属性(对象不存在时报错AttributeError)
    print(s1.name)
    方法2:getattr(对象,属性名,默认值),属性不存在时返回默认值,如果没有设置默认值,属性不存在时还是会报错。
    print(getattr(s1,name,"默认值"))
    方法3:对象._getattribute_(属性名);属性不存在会报错

    6.2增加/修改(给对象增加/修改属性)

    注意:给对象增加属性,只会添加到当前对象中。不会影响当前类的其他类
    (属性不存在就增加,存在就修改)
    方法1:对象.属性 = 值
    方法2:setattr(对象,属性名,属性值)
    方法3:对象._setattr_(属性名,属性值)

    6.3删除(删除对象属性)

    注意:只删除当前对象的属性,对其他对象没影响
    方法1:del 对象.属性
    方法2:delattr(对象,属性名);属性不存在会报错
    方法3:对象._delattr_(属性名)

    7.对象的使用

    在python中所有的数据都是对象,所有的变量存储的都是对象的地址
    将对象给别的变量赋值,stu1 = stu2,赋对象地址,import copy;stu3 = copy.copy(stu1),产生新的对象
    想不返回对象的地址,可用_str_:

    def __str__(self):
        return str(self.__dict__)
        #return "ksjfj"
        #return self.name
    

    return后为self.dict时,返回对象的所有属性和属性值,return后有别的字符串时,就返回该字符串,只能是字符串。

    8.slots魔法

    类的字段:对象属性,类的字段,声明在类中函数外的变量就是类的字段。不会因对象的变化而改变,如人的总数。使用时要通过类来使用:类.字段
    _slots:用来约束当前类的对象的属性有那些
    _slots
    (可以有的属性,如:"name"),其中的属性不一定全用,但绝对不能有其他属性

    9.内置属性

    1.类._name---->获取当前类的名字
    2.类._doc
    ---->获取类的说明文档
    3.对象._class---->获取对象的类
    4.类._dict
    ---->获取当前类的所有的字段,以字典的形式返回,(函数名也是字段)
    5.对象._dict---->获取当前所有属性和其对应的值
    6.类._module
    ---->获取当前类所在的模块名
    7.类._bases_---->获取当前类的父类,返回的是一个元祖,元祖的对象是类

    相关文章

      网友评论

          本文标题:day_14类和对象

          本文链接:https://www.haomeiwen.com/subject/qtjlzftx.html