类方法、特性和迭代器

类、特性和迭代器

  • self:指向对象本身

访问权限

  • 私有:__member,在成员属性面前加两个下划线

继承

  • issubclass(child,base):确定一个类是否是另一个类的子类,是内置方法
  • bases:特殊属性,可以知道它的基类
  • isinstance(s,SPAMFilter):是否是特定类的实例
  • 如果继承多个类,而这些类中有相同的方法,继承时排在前面的类方法会覆盖后面的类方法

接口和内省

  • hasattr(tc,‘talk’):知道对象中是否有某个属性,有返回True,没有返回False
  • setattr(tc,‘talk’):设置对象属性
  • dict:特殊属性,可以查看对象的所有值

抽象

  • @abstractmethod:装饰器,标记下面的方法为抽象的,在子类中必须实现

特性

  • property():将存取方法作为参数(获取方法在前,设置方法在后)创建了一个特性,再用一个变量来关联,统一对成员变量赋值
class Rectangle:	
    def __init__(self):
        self.width = 0
        self.height = 0
	def set_size(self,size):
        self.width,self.height = size
        
    size = property(get_size,set_size)
r = Rectangle()
r.size = 150,100 #能够直接对size进行修改
  • @staticmethod:装饰器,表示下面方法为静态方法
  • @classmethod:表示下面方法为类方法

__ getattr__等方法,可以拦截对对象属性的所有访问企图

  • __ getattribute __(self,name):在属性被方法时自动调用

  • __ getattr__(self,name):属性被访问,而该属性没有时调用

  • __ setattr__(self,name,value):给属性赋值时调用,需要避免无限循环,而用dict[]

  • __ delattr__(self,name):删除调用

  • __ dict__[name] = value:字典,在setattr中使用防止无限循环

迭代器

  • __ iter __():该方法返回一个迭代器,包含方法__next__的对象,也可用内置函数next(it)与it.__next__()等效
#不停的迭代,没有返回对象时会引发StopIteration异常
def __next__(self):
    self.a = self.a + self.b
    return self.a
#返回本身,可用在for循环中进行迭代
def __iter__(self):
    return self
  • 可以将迭代对象转化为序列,通过list()等函数

生成器

生成器是一种使用普通函数语法定义的迭代器

  • 包含yield的语句的函数都被称为生成器
  • 每次使用yield生成一个值后,函数都将冻结,在此体质执行,然后等待被重新唤醒,唤醒后在源代码位置执行
  • 函数被调用时,不会执行函数体内的代码,而返回一个迭代器,只能返回迭代器,否则会抛出异常
nested = [[1, 2], [3, 4], [5]]
def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element
  • 迭代生成,例如列表来表示树结构
def flatten(nested):
    try:
        for sublist in nested:
            for element in flatten(sublist):
                yield element
    except TypeError:
        yield nested
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值