Python复习--动态添加属性和方法

给对象或者类添加属性

class Person(object):
    def __init__(self, newName, newAge):
        self.name = newName
        self.age = newAge

p1 = Person("老王", 10)
p1.sex = "男" # 给对象添加属性,该属性只属于该实例对象不属于其他对象
Person.addr = "北京" #给类添加属性,所有实例对象都可以用该属性
print(p1.addr)
print(p1.sex)

北京
男
北京

给对象添加方法

import types
class Person(object):
    def __init__(self, newName, newAge):
        self.name = newName
        self.age = newAge

def eat(self):
    print("---eat---")
p1 = Person("老王", 10)
p1.eat = types.MethodType(eat, p1) #将某方法添加到某对象上
Person = types.MethodType(eat, Person) # 同理,将方法添加到类上,所有对象都可用.
p1.eat()

生成器
一遍循环一遍计算的机制,叫做生成器
生成器可以节省空间

生成器创建的方式有两种
一.将列表生成式的[]改为()

a = [x for x in range(4)]
a
Out[3]: [0, 1, 2, 3]
b = (x for x in range(4))
b  #返回一个生成器对象
Out[5]: <generator object <genexpr> at 0x7f8116d6e308>
next(b) #可以通过next()函数挨个取值
Out[6]: 0
next(b)
Out[7]: 1
next(b)
Out[8]: 2

二.另一种是带 yield的函数
此时该函数就不是函数了,而是一个生成器对象

def creatNum():
    print("---start---")
    for i in range(5):
        print("---1----")
        # print(i)
        yield i
        print("---2---")
    print("---stop---")

creatNum()

In [22]: b = creatNum()                                                                                                    

In [23]: b                                                                                                                 
Out[23]: <generator object creatNum at 0x7f20fdb110f8>

In [24]: next(b)                                                                                                           
---start---
---1----
Out[24]: 0

In [25]:                                                                                                                   

In [25]: next(b)                                                                                                           
---2---
---1----
Out[25]: 1

send:为yied 传递参数 + next()功能

def test(): 
   ...:     i = 0 
   ...:     while i<5: 
   ...:         temp = yield i 
   ...:         print(temp) 
   ...:         i += 1 


In [3]: a = test()                                                                                                         

In [4]: a                                                                                                                  
Out[4]: <generator object test at 0x7effd0720678>

In [5]: next(a)                                                                                                            
Out[5]: 0

In [6]: next(a)                                                                                                            
None
Out[6]: 1
In [8]: a.send("hh")                                                                                                       
hh
Out[8]: 3



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值