Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29419810
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类:

2010-10-18 21:42:25

第三章节       类、对象、变量

示例

class Song                                #python定义一样

    def initialize(name,artist,duration)   #__init__一样构造方法

      @name = name                     #self.name = name 实例变量以@开头

      @artist = artist

      @duration = duration

    end

  end

  song = Song.new("Z","e","desc")      #初始化 myobj = Song(“”,””,””)

类继承示例

class KaraoSong < Song

    def initialize(name,artist,duration,lyrice)

      super(name,artist,duration)

      @lyrics = lyrice

    end

  end

实现类里面的属性操作

class KaraoSong < Song

    def initialize(name,artist,duration,lyrice)

      super(name,artist,duration)

      @lyrics = lyrice

    end   

    def name

      @name

    end

    def artist

      @artist

    end

    def duration

      @duration

    end

  end

调用示例:

song = KaraoSong.new("Z","e","desc","e")

puts song.name                             #实现类似于GETSET操作功能

 

另外实现类似于Delphi里面的属性功能

class Song

    def initialize(name,artist,duration)

      @name = name

      @artist = artist

      @duration = duration

    end

    attr_reader :name,:artist,:duration

  end

  song = Song.new("Z","e","desc")

  puts song.name

PSpython里面是如何实现属性的快速访问的?查一下

实现类似set方法

class Song

    def initialize(name,artist,duration)

      @name = name

      @artist = artist

      @duration = duration

    end

    attr_writer :duration        #表示set操作

    attr_reader :duration        #表示有get操作

  end

  song = Song.new("Z","e","desc")

  song.duration = 257

  puts song.duration

 

内部状态保存在实例变量中,通过方法暴露出来的外部状态就属性!类可以执行的其他动作我们称为方法。通常我们是把一个对象的外部状态称之为属性。

@property  这就是表示属性

 

变量关联到类的某个特定的实例及操作这些变量的方法那这些就是所谓的实例变量和实例方法了。有些时候类本身需要自己的状态即与类本身是相关联起来的这就是类变量的概念了!

 

类变量是与所有对象所共享的。即它不是实例变量。类变量由两个@开头。如@@count。类变量在使用之前必须要始化。通常所谓的初始化其实就是在类定义中简单赋值

 

class Song

    @@plays = 0                        #不放在构造函数中的!

    def initialize(name,artist,duration)

      @name = name                     #self.name

      @artist = artist

      @duration = duration

    end

    attr_writer :duration

    attr_reader :duration

  end

说明:类变量对其类与实例都是私有的。即只能在一个类的内部去使用了!

 

类方法:函数构造

Ruby的静态方法如下

 

  class Song

    def initialize(name,artist,duration)

      @name = name

      @artist = artist

      @duration = duration

    end

    attr_writer :duration

    attr_reader :duration

  end

 

  class SongList

    MAX_TIME = 5*60

    def SongList.is_too_long(song)         #静态方法表示法

      return song.duration > MAX_TIME     

    end

  end

  song = Song.new("Z","e",852)

  puts SongList.is_too_long(song)

 

 

类的权限控制

    当我们在设计类的接口时,要考虑类想要向外部世界暴露何种程序的访问。如果你的类允许过度的访问就会增加应用中的耦合的风险----------类的用户可能会依赖于类实现的一些细节而非逻辑的接口。

 

方法1.

Private

    Def aaaa()

 

    End

    Def bbbb()

 

    End

方法2

Public :method1,:method4

其中方法二跟python一样的。非常类似

 

 

 

 

阅读(1256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~