pyhon中方法、属性、迭代器

构造方法:

构造方法代表着类似于以前例子中使用过的那种名为init的初始化方法

当一个对象被创建后,会立即调用构造方法

>>> class FooBar:
    def __init__(self):
        self.somevar=42

>>> f=FooBar()
>>> f.somevar
42
>>> class fO
SyntaxError: invalid syntax
>>> class FooBar():
    def __init__(self,value=42):
        self.somevar=value

>>> f=FooBar(‘This is a constructor argument‘)
>>> f.somevar
‘This is a constructor argument‘

重写一般方法和特殊的构造方法

>>> class Bird:
    def __init__(self):
        self.hungry=True
    def eat(self):
        if self.hungry:
            print ‘Aaaah...‘
            self.hungry=False
        else:
            print ‘No,thanks!‘

>>> b=Bird()
>>> b.eat()
Aaaah...
>>> b.eat()
No,thanks!
>>> class SongBird(Bird):
    def __init__(self):
        Bird.__init__(self)  #调用超类的构造方法
        self.sound=‘Squawk!‘
    def sing(self):
        print self.sound

>>> sb=SongBird()
>>> sb.sing()
Squawk!
>>> sb.eat()
Aaaah...
>>> sb.eat()
No,thanks!

super函数

super(SongBird,self)

详情请参考:http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html

>>> __metaclass__=type
>>> class Bird:
    def __init__(self):
        self.hungry=True
    def eat(self):
        if self.hungry:
            print ‘Aaaah...‘
            self.hungry=False
        else:
            print ‘No,thinks!‘

>>> class SongBird(Bird):
    def __init__(self):
        super(SongBird,self).__init__()
        self.sound=‘Squawk!‘
    def sing(self):
        print self.sound

>>> n=SongBird()
>>> n.sing()
Squawk!
>>> n.eat()
Aaaah...
>>> n.eat()
No,thinks!

属性

通过访问器定义的特性被称为属性

>>> class Rectangle:
    def __init__(self):
        self.width=0    #特性
        self.height=0   #特性
    def setSize(self,size):    #通过访问器方法改变特性
        self.width,self.height=size
    def getSize(self):    #通过访问器方法访问特性
        return self.width,self.height

>>> r=Rectangle()
>>> r.width=10
>>> r.height=5
>>> r.getSize()
(10, 5)
>>> r.setSize((150,100))
>>> r.width
150

property函数

>>> __metaclass__=type
>>> class Rectangle:
    def __init__(self):
        self.width=0
        self.height=0
    def setSize(self,size):
        self.width,self.height=size
    def getSize(self):
        return self.width,self.height
    size=property(getSize,setSize)

>>> r=Rectangle()
>>> r.width=10
>>> r.height=5
>>> r.size
(10, 5)
>>> r.size=150,100
>>> r.width
150

迭代器

迭代器就是具有next

>>> class Fibs:
    def __init__(self):
        self.a=0
        self.b=1
    def next(self):
        self.a,self.b=self.b,self.a+self.b
        return self.a
    def __iter__(self):
        return self

>>> fibs=Fibs()
>>> for f in fibs:
    if f>1000:
        print f
        break

1597
>>> it=iter([1,2,3])
>>> it.next()
1
>>> it.next()
2
>>> class TestIterator:
    value=0
    def next(self):
        self.value+=1
        if self.value>10: raise StopIteration
        return self.value
    def __iter__(self):
        return self

>>> ti=TestIterator()
>>> list(ti)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

yield 生成器

任何包含yield语句的函数称为生成器。每次产生一个值(使用yield语句),函数就会被冻结,即函数停在那点等待被激活,函数被激活后从停止的那点开始执行

>>> nested=[[1,2],[3,4],[5]]
>>> def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element

>>> for num in flatten(nested):
    print num

1
2
3
4
5
时间: 2024-08-07 17:00:47

pyhon中方法、属性、迭代器的相关文章

js---17继承中方法属性的重写

function F(){}; var f = new F(); f.name = "cf"; f.hasOwnProperty("name");//true F.prototype.age = 22; f.hasOwnProperty("age");//false,age是原型对象的属性,name是F对象的属性,不是同一个.hasOwnProperty是对象的方法 F.prototype.isPrototypeOf(f);//true //多态

jQuery中一些不常用的方法属性【转载】

index(subject) 搜索与参数表示的对象匹配的元素,并返回相应元素的索引值.如果找到了匹配的元素,从0开始返回:如果没有找到匹配的元素,返回-1. data() data(elem):为页面对象添加唯一标识. data(name, value):将数据保存在元素的一个key里面.$("#box").data("shape","rectangle"). data(name):获取值.$("#box").data(&qu

Swift语言中的属性,方法,下标脚本以及继承

从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并不是太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于很好的应用Swift语言将会有比较大的帮助. 属性 存储属性 存储属性通常是那些可以通过直接赋值,或者直接访问成员能够获得的属性类型. 它有些要注意的地方: 若一个结构体被声明为常量,则子属性无法被修改了.在Objective-C中,我们总是无法修改结构体的子属性,但是swift却可以,不过这种情况是个例外,当你存储型属性是个结构体并且是个常量,那你就不要再

OC中的属性、方法及内存管理

普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量.-(void)show;输出 … 访问属性    属性:属性专门处理实例变量.(程序执行过程当中)    初始化方法:一创建对象(第一时间),给实例变量赋值.    工厂方法:只一个方法,帮我们解决创建对象问题.初始化对象的问题.工厂方法创建对象最简单.(对象达到一定量级) 补:在类方法中,可以调用类中创建的实例的实例方法或实例变量. 算法.设计模式:是人们总结的一种规律,一种思想. 1.单例模式    是一种特殊的工厂方法.    

为什么JAVA中的属性不能覆盖而方法却可以覆盖

以前还真就没有想过这个问题,今天上课的时候 徐老师提出了这么一个问题,在java中是属性重要?还是方法重要? 徐老师形象的讲了这么一个比喻来解释了java中属性与方法的地位 李嘉诚很有钱, 李嘉诚如果在程序中 他的资产的数目就可以被认为是他的一个属性. 李嘉诚还有一个儿子,他的儿子也有资产 但他的资产是他自己的,银行也不可能 同意李嘉诚儿子的资产就因为是他的儿子就把李嘉诚的资产覆盖掉.... 所以说JAVA中最重要的是属性~~~ 一个程序最重要的是数据...这个我非常认同,因为软件无非就是信息的

js中__proto__, property, prototype, 对象自身属性方法和原型中的属性方法的区别

__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas

C# DataTable.DefaultView.Sort 排序方法 DataTable合并 DataTable中Merge属性的用法

排序 DataTable.DefaultView.Sort ="ID ASC"" DataTable进行合并1(必须相同结构DataTable)  DataTable中Merge属性 两个DataTable进行合并,最初测试使用DataTable的Merge方法直接合并读取,一个是两边接收的数据类型有很多不致,一个是感觉这个太简单了.所以在程序总报类型错误的时,我舍弃了这种方法取而代之的是从两个DataTable里面读值分别进行判断显示. DataTable  oldData

JQuery中根据属性或属性值获得元素(6种情况获取方法)

根据属性获得元素 1.比如要获取页面p标签中属性有id的元素 $("p[id]").css("color","red"); 根据属性值获得元素 1.$.在jQuery 中$("<span>"),这个语法等同于$(document.createElement("span")) ,这是一种用法,在选择元素的时候还会这样子的用:[attribute$=value],匹配给定的属性是以某些值结尾的元素.

extjs中treepanel属性和方法

1.Ext.tree.TreePanel 主要配置项: root:树的根节点.rootVisible:是否显示根节点,默认为true.useArrows:是否在树中使用Vista样式箭头,默认为false.lines:是否显示树线,默认为true.loader:树节点的加载器,默认为Ext.tree.TreeLoader. selModel:树的选择模式,默认为Ext.tree.DefaultSelectionModel.pathSeparator:树节点路径的分隔符,默认为“/”.single