美文网首页
2018-09-06 Day14-类和对象01

2018-09-06 Day14-类和对象01

作者: Deathfeeling | 来源:发表于2018-09-06 16:50 被阅读0次
    1、理论上的定义:

    类:就是拥有相同功能和属性的对象的集合。(抽象)
    对象:类的实例(具体)

    2、从生活角度

    如果说人这个物种是一个类,那么每一个人就是一个对象。

    3、编程方式

    面向过程编程:以算法为工具
    函数式编程:以函数为工具
    面向对象编程:以类和对象为工具(面向生活)

    类:对拥有相同功能(方法)和相同属性的封装。
    封装效果:一个类中可以对多个功能进行封装(多个函数);封装多个属性

    一、类的声明格式

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

    class:声明类的关键字。
    类名:标识符,不能是关键字。首字母必须大写!采用驼峰式命名。例如:StudentSystem。
    (驼峰式命名:第一个单词首字母小写,其他单词的首字母大写)
    父类列表:这个部分可以省。这是一个继承语法,可以多继承。
    类的内容:类的方法和属性。

    二、类中的方法

    调用方式:对象.函数名()
    方法:就是声明在类中的函数
    方法分类:对象方法,类方法,静态方法。
    直接写在类中的方法,自带一个 self 参数
    对象方法:通过对象来调用。

    三、构造方法

    • 构造方法:系统自动创建,方法名和类名一样。用来创建对象。
    • _init_:方法的功能是用来做初始化和添加对象属性。
    • 当我们通过构造方法去创建对象的时候,系统会自动调用init方法。
    • 如果类的 init 方法有参数,通过给构造方法传参。

    四、创建对象

    创建类的时候,系统会默认创建这个类对应的构造方法(方法名和类名相同)。一个类可以有多个对象,只要调用构造方法,就会产生新的对象。

    • 构造方法:类名() --> 创建类对应的对象
    • 通过对象调用对象方法,默认参数 self 不需要传参。
    • 创建对象的过程:调用构造方法在内存中开辟空间创建一个对象,然后用新建的这个对象去调用 init 方法来初始化对象的属性,最后才将对象返回。
    class Person:
        """
        人类
        """
        def eat(self):
            print('人吃饭')
    #创建Person类的对象,并且将对象的地址存到 p1中
    p1 = Person()  
    p1.eat()
    

    五、对象属性

    1、属性

    对象的属性:不同的对象,对应的值可能不一样,这样的属性是对象属性。属于对象类中的对象属性是声明在 init 方法中的。

    • 声明格式是:self . 属性名 = 初始值
    • 对象的使用:对象 . 属性名
    方法一
    class Student:
        """学生类"""
        def __init__(self):
            #声明对象的属性name,age,id
            self.name = '张三'
            self.age = 0
            self.id = '001'
    stu1 = Student()
    print(stu1.name,stu1.age,stu1.id)
    #通过对象去修改对象的属性
    stu1.name = '星辰'
    print(stu1.name)
    
    方法二
    class Dog:
        """狗类"""
        def __init__(self, type1, color1):
            self.type = type1
            self.color = color1
    dog1 = Dog('土狗','黄色')
    print(dog1.type, dog1.color)
    
    方法三
    class Computer:
        """电脑类"""
        def __init__(self, color='白色', memory=0):
            self.color = color
            self.memory = memory
    com1 = Computer()
    print(com1.color,com1.memory)
    

    类的字段(属性):属于类,所有对象对应的值是一样的。

    2、属性的增删改查

    python是动态语言,python中类的对象的属性可以进行增删改查的操作。


    • 方法一:对象.属性名(常用)
      方法二:getattr(对象, 属性名, default=None)
      属性不存在可以通过设置默认值,让程序不崩溃,并且返回默认值。
      方法三:对象._getattribute_(属性名)

    • 方法一:对象.属性 = 新值(常用)
      方法二:setattr(对象, 属性名,值)
      方法三:对象._setattr_(属性名,值)

    • 方法一:对象.属性 = 新值(属性不存在,就是添加)
      方法二:setattr(对象, 属性名,值)
      方法三:对象._setattr_(属性名,值)

    • 方法一:del 对象.属性
      方法二:delattr(对象,属性)
      方法三:对象. _delattr_(属性)

    六、类的属性(字段)

    1、类的字段:就是声明在类的里面,方法的外面的变量

    class Person:
      #这个number就是类的字段
      number = 6
    

    2、什么时候声明类的属性:
    属于类,并且对于类的所有对象来说是共有的。

    3、怎么使用

    print(Person.number)
    

    七、对象方法

    • 直接声明在类中的函数默认是对象方法,有一个默认参数 self
    • 对象方法要通过对象来调用:对象.对象方法
    • 对象方法中默认参数 self , 不需要传参。因为在调用这个方法时,系统自动当当前对象传给 self 。
    • 哪个对象调用,self 就指向谁。对象能做的事情,self 也能做,本质上是一样的

    练习:

    # 1、写一个矩形类,有属性长和宽,功能:求周长和面积
    class Rect:
        def __init__(self, width, weight):
            self.width = width
            self.weight = weight
        def perimeter(self):
            print('周长是:',(self.weight + self.width)*2)
        def area(self):
            print('面积是:',(self.width*self.weight))
    rect1 = Rect(3,4)
    rect1.perimeter()
    rect1.area()
    
    周长是: 14
    面积是: 12
    
    #2、写一个班级类,班级里面有多个学生的成绩,可以获取成绩的最高分
    class Class_python:
        def __init__(self,*score):
            self.score = score
        def score_max(self):
            a = list(self.score)
            a.sort()
            print('最高分是:%d'%a[-1])
    class1 = Class_python(2,3,4,5,23,43,32,)
    class1.score_max()
    
    最高分是:43
    

    八、类的方法

    声明形式:声明方法前需要使用@classmethod说明。
    特点:自带一个默认参数 cls,这个参数调用的时候不需要传值。系统自动传值,谁调用指向谁。(因为只能被类调用,所以始终指向当前类)
    调用:通过类来调用 --> 类.类方法()

    class Class1:
        #声明一个对象方法
        def class2(self):
            print('这是一个对象方法')
        #声明一个类方法
        @classmethod
        def class_func(cls):
            print('这是一个类方法')
    

    九、静态方法

    声明形式:声明方法前需要使用@staticmethod说明。
    特点:没有默认参数
    调用:通过当前类调用 --> 类.静态方法()

        @staticmethod
        def static_func():
            print('这是一个静态方法')
    调用
    c1 = Class1()
    c1.static_func()
    

    十、怎么选择三种方法

    a、只要实现方法的功能需要用到对象的属性,我们就使用对象方法;否则就使用静态方法或者类方法。
    b、不使用对象方法的前提下,如果实现功能需要用到类的字段,就用类方法。
    c、实现功能既不需要对象的属性,又不需要类的字段,就使用静态方法。
    注意:静态方法和类方法划分不用那么严格,因为静态方法能做的,类方法也能使用;反之亦然。

    相关文章

      网友评论

          本文标题:2018-09-06 Day14-类和对象01

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