美文网首页
day12-面向对象

day12-面向对象

作者: PeppaTang | 来源:发表于2018-07-31 19:43 被阅读0次

    1、迭代器,生成器

    生成器

    a.可以看成是一个可以存储多个数据的容器。需要里面的数据的时候就生成一个数据,里面的数据只能从前往后一个一个的生成,
    不能跳跃。生成的数据不能再生成了

    b.获取生成器里面的数据,需要使用next()方法

    c.只要函数声明中有yied关键字,函数就不再是一个单纯的函数,而变成一个生成器

    def xu_lie(n):
        pre_1 =1
        pre_2 =1
        for x in range(1,n+1):
            if x == 1 or x==2:
                current= 1
                yield current
                continue
            current = pre_1+pre_2
            pre_1,pre_2 = pre_2 , current
            # print(current)
            yield current
    
    xulie = xu_lie(10)
    print(xulie.__next__())
    print(xulie.__next__())
    print(xulie.__next__())
    
    输出:
    =: 3
    =: 5
    =: 8
    =: 13
    =: 21
    =: 34
    =: 55
    

    2、认识面向对象

    类:对拥共同属性的方法的对象的封装(抽象)
    对象:对象就是类的实例(具体)

    类的声明

    class 类名(父类):
    属性
    方法

    类名:标识符,类名的首字母大写,驼峰式命名
    ():类要继承其他的类需要写括号,括号里面是父类的名字。可以省略

    属性:对象属性和类的字段---->保存数据
    方法:实质就是声明在类中的函数 ----> 实现功能

    self:对象的默认参数,谁调用它self就是谁

    3、对象的属性

    对象的属性声明

    class 类名:
        def __init__(self):
            self.属性名 = 初值
            self.属性名2 = 初值2
    

    init :对属性进行初始化,init方法中除了self以外,其他的每个参数都必须有值

        def __init__(self,name1,age1):
    #         在这个地方声明对象的属性
            print('===')
            print(name1)
    

    构造方法中的参数,实质是传给init方法的参数的

    4、对象属性的増删改查

    查看属性

    方法一:对象.属性(如果属性不存在会报错)

    方法二:对象._ _ getattribute _ _(属性名)getattr(对象,属性名)
    setattr(对象,属性名)

        print(dog1.age,dog1.color)
        print(dog1.__getattribute__('age'))
        print(getattr(dog1,'age'))
    

    如果设置了default的值,name当属性不存在的时候不会报错,并且返回默认值
    print(getattr(dog1,'abc','无名氏'))

    修改属性的值

    方法一: 对象.属性 = 新值

    方法二: 对象._ _ setattr _ _(属性名,新值)

    删除对象的属性

    del 对象.属性

     del dog1.age
      print(dog1.age) #AttributeError: 'Dog' object has no attribute 'age'
    
    

    delattr(对象,属性)

    delattr(dog1,'color')
     print(dog1.color)
    

    5.slot魔法

    slots的功能:就是约束类中的对象的属性。

    __slots__ = ('name','age','sex')
        def __init__(self,name='',age = 0):
            self.name = name
            self .age = age
            # self.tel = 123  'Person' object has no attribute 'tel'
    

    6、类中的方法

    属性:对象的属性(属性)、类的属性(类的字段)
    对象属性:属于对象的,不同对象对应的值可能不一样(对象属性,通过对象来使用)
    类的字段:声明在类里面,函数外面。类的属性属于类(类的字段,通过类来使用)

    方法:对象方法(方法)、类方法、静态函数
    对象方法:自带一个self参数,一般要通过对象去调用

    类方法:1.使用@classmethod修饰
    2.自带一个cls参数,并且这个参数不用传参,谁来调用这个方法,cls就指向谁
    3.类方法要通过类来调用

    静态方法:1.使用@staticmethod修饰
    2.没有默认参数
    3.静态方法通过类调用

    自定义对象的打印格式
    def str(self):
    return self.name+','+str(self.age)

    
    class Person:
    #     number是类的字段
        number = 0
        def __init__(self,name = '',age = 0):
    
            # age name、是对象属性
            self.name =name
            self.age = age
    
        # eat方法是对象方法
        def eat(self,food):
            print('%s在吃%s'%(self.name,food))
    
        # hurt_earth就是一个类方法
        @classmethod
        def hurt_earth(cls):
            # cls指向的是调用这个方法的类,cls可以普通当成类来使用
            pt = cls('张三')  #可以使用cls创建对象
            print(pt.name)
            print('人类破坏环境!!')
    
            print(cls.number)  #可以通过cls使用类的字段
    
    
        # protect_earth是一个静态方法
        @staticmethod
        def protect_earth():
            print('人类保护地球')
    
    
    if __name__ == '__main__':
        print(Person.number)
    
        # 对象属性要通过对象来使用
        p1 = Person('小明')
        print(p1.name)
    
        p1.eat('面条')
    
        p2 = Person('小红')
        p2.eat('火锅')
    
        # 4.类的方法要通过类来调用
        Person.hurt_earth()
    
        # 5.静态方法通过类调用
        Person.protect_earth()
    输出:0
    小明
    小明在吃面条
    小红在吃火锅
    张三
    人类破坏环境!!
    0
    人类保护地球
    
    

    练习:
    写一个班级类,属性:班级名、学生;功能:添加学生,查找学生。

      class Student:
            def __init__(self, name, age):
                self.name = name
                self.age = age
    
            def __str__(self):
                return 'name:%s age:%d'%(self.name,self.age)
    
    
        class Class():
            def __init__(self, name='', students=[]):
                self.name = name
                self.students = students
    
            def add_student(self):
                name =input('name:')
                age = input('age:')
    
                # 根据输入的信息创建学生对象
                stu = Student(name,int(age))
                    #   添加学生
                self.students.append(stu)
    
    
        cls1 =Class('py1805')
        cls1.add_student()
        print(cls1.students[0])
    
    

    相关文章

      网友评论

          本文标题:day12-面向对象

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