Day12-课堂笔记-对象

1.迭代器和生成器:

1)生成器

  • 可以看成一个可以存储多个数据的容器。需要里面的数据的时候就生成一个,里面的数据只能从前往后一个一个的生成,不能跳跃,也不能从后往前,生成过的数据不能在生成了
  • 获取生成器里面的数据,需要使用_next_()方法
  • 生成器存的是一个产生数据的规律
  • 函数声明中有yield关键字,函数就不再是一个单纯的函数了,
    而是变成一个生成器,生成器就是保存一定规律的容器
  • 和列表比较:列表存数据,数据必须是实实在在存在的数据,一个数据会占一定的内存空间。
    生成器存数据,存的是产生数据的算法,没有数据去占内存空间
# 1,1,2,3,4,5,8,13,21
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__())
print(xulie.__next__())
for x in xulie:
    print('==',x)
if __name__ == '__main__':
    pass
    # i for i in range(10) #生成式
    x=(i for i in range(10))
    # x就是一个生成器,用来产生数据
    print(x)
    print(x.__next__())
    print(x.__next__())

结果:

1
1
2
3
== 5
== 8
== 13
== 21
== 34
== 55
at 0x000001FC31119408>
0
1

2.认识面向对象

1)类

对拥有相同属性和功能的对象的封装(集合)
类是抽象
?类中相同属性的(大部分)值是不确定的

2)对象

对象就是类的实例
对象是具体
对象的属性是确定的
例:
如果说人是一个类,我就是一个对象,老王也是人的一个对象
如果说电脑是一个类,我桌上的这台mac就是一个对象
如果说杯子是一个类型,我桌上这个粉色的杯子就是一个对象
3.面向对象编程
面向过程编程:一步一步的写代码实现功能-->工具:逻辑和算法
函数式编程:面对问题考虑有没有拥有某种功能的函数-->工具:函数
面向对象编程:面对问题考虑有没有相应的对象来解决这个问题-->工具:类和对象

3.类的声明

1)类的声明:

  • 格式;class 类名(父类):类名后面的()可有可无
    属性
    方法
    class:python中声明类的关键字
    类名:标识符,类名的首字母大写,驼峰式命名
    () :类要继承其它的类,需要写括号,括号里面是父类的
    名字。括号可以省略
    属性:包含对象属性和类的字段-->保存数据
    方法:实质就是声明在类中的函数-->实现功能

2)声明对象:

  • 通过类的构造方法创建对象(名字和类名同名的方法就是构造方法,自动生成)
  • 对象名=类名()
  • 类对象可以通过点语法使用类中声明的对象方法和属性
    对象.方法名()
    对象.属性名
    例:
# 1.声明一个person类
class Person:
    '''
    类的说明:人类
    '''
    # 声明两个对象方法,需要使用对象来调用
    '''
    对象方法都有一个默认参数self,在调用的时候不用传参
    (系统会自动给self传参),谁来调用这个方法,self就是谁
    '''
    def eat(self):
        print(self)
        print('正在吃饭')
    def sleep(self):
        print(self)
        print('正在睡觉')
if __name__ == '__main__':
    # 声明对象
    p1=Person()
    print(p1)
    # 一个类可以有多个对象
    p2 = Person()
    print(p2)
    # 对象可以调用对象方法
    p1.eat()
    p2.sleep()

结果:

<main.Person object at 0x000002265A069C88>
<main.Person object at 0x000002265A069CF8>
<main.Person object at 0x000002265A069C88>
正在吃饭
<main.Person object at 0x000002265A069CF8>
正在睡觉

4.对象的属性

1)对象属性的声明

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

init(self)系统自带的一个方法,不能直接调用,而是通过类创建对象的时候,系统会自动调用这个方法
init()方法的作用是对对象的属性进行初始化
通过构造方法创建对象的时候,一定要保证,init方法中除了self以外,其他的每个参数都必须有值
例:

class Person:
    def __init__(self,name='',age=0,sex='男'):
        #在这里声明对象的属性
        print('===')
        # print(name)
        #在init方法中声明对象属性
        '''
        name、ag和sex就是Person这个类的对象属性,
        类的对象属性,需要通过对象来使用
        '''
        self.name=name
        self.age=age
        self.sex=sex

if __name__ == '__main__':
    # 注意:构造方法中的参数,实质给init()方法
    # 的参数赋值
    p1=Person('付波',24)
    print(p1.name,p1.age,p1.sex)
    p2 = Person('付波')
    print(p2.name,p2.age, p2.sex)
    #创建的饿时候不给属性值赋值
    p3 = Person()
    print(p3.name,p3.age, p3.sex)
    p4= Person(name='付波',age=18)
    print(p4.name,p4.age, p4.sex)

结果:

===
付波 24 男
===
付波 0 男
===
0 男
===
付波 18 男

5.属性的增删查改

1)查看属性(获取属性)

方法一:对象.属性(如果属性不存在,会报错)
方法二:对象.getattribute(属性名)
和getattr(对象,属性名)

你可能感兴趣的:(Day12-课堂笔记-对象)