学习笔记之面向对象

类(class)是一种面向对象编程语言的构造,描述了所创建的对象共同的属性和方法。
在这里插入图片描述

一、类属性

  • 类属性,又称静态属性
  • 只有通过类才能修改
  • 实例拥有类属性,但不能修改类属性
    实例属性
  • 实例属性,又称动态属性
  • 通过实例创建
  • 不同实例的实例属性不同
  • 实例的__dict__显示当前实例的所有属性
    self的作用
  • 类中的方法,如无特殊规定,都是以self作为第一个参数
  • self引用当前实例

二、类的方法

2.1 对比方法和函数

  • 名称的命名,方法块的编写方式都一样
  • 方法不能单独调用,需要通过实例/类调用
  • 方法的第一个参数必须是self

2.2 类的方法

使用装饰器: @classmethod
类方法的第一个参数: cls,表示类本身

2.3 静态方法

  • 使用装饰器: @staticmethod
  • 静态方法不与实例绑定

三、继承

3.1 继承的含义

  • 继承是对象的特性之一
  • 继承是面向对象编程的一个重要概念

3.2 重写

class Eat():
    def __init__(self,name):
        self.name = name
    def eat():
        return "fish"

class b(Eat):
    def __init__(self,name,age):
        # 保留父类属性
        super().__init__(name)
        self.age = age

d = b("cym",26)
print(dir(d))

四、多态

Python天然具有多态

五、封装

使用__属性名的方法进行私有化封装

额外内容:__repr__:对解析器友好,__str__:对用户友好。
from fractions import Fraction:对分数进行运算,可以自动约分

六、控制属性访问

  • 优化内存:
    __slots__:类似于设置只读属性
  • 与属性相关的特殊方法
    __getattr__:获取不存在的属性时拦截
    __setattr__:赋值不存在的属性时拦截,并增加这个属性

七、迭代器

hasattr(类型名称,方法名称):判断某个类是否拥有某个方法

# 判断list类是否可以迭代,返回True或False
print(hasattr(list,"__iter__"))

迭代器特有方法__next__,将迭代器里的内容逐一读到内存

ls = [1,2,3,4]
iter_ls = iter(ls)
print(iter_ls.__next__())
print(iter_ls.__next__())
print(iter_ls.__next__())
print(iter_ls.__next__())
# 如果继续向下读会抛异常,而for循环可以帮助处理异常
# print(iter_ls.__next__())
# for i in iter_ls:
#     print(i)
>>>
1
2
3
4

八、生成器

介绍一个生成器的工具

import itertools
# 无限生成,用多少读多少
number = itertools.count(start=7)
print(next(number))

定义一个生成器对象:

def g():
	# 返回当前值,并挂起。下次再调用时从这里开始
    yield 0
    yield 1
g1 = g()
print(next(g1))

生成器解析:
列表解析外层的[]换成()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值