python基础学习笔记5--对象

对象(object)

1.对象(object): 面向对象程序设计重要术语。

对象的特性:多态性、封装性、继承性

 

>>def add(x,y):

          return x+y

#对于很多类型的参数都可以用:

>>>add(1,2)

3

>>>add('Good','Bye')

'GoodBye'

 

 

2.所有的Python对象都拥有三个特性:身份,类型和值。

  • 任何对象的身份都可以用内建函数:id()来表示;
  • 也可以用内建函数type()查看python对象的类型。

 

3.类(class)

Python中,喜欢用单数名词,并且首字母大写,来描述对象的类。如Bird和Lark.

类的关系:子类—>类<----超类

Subclass, class, superclass

如:百灵鸟类  是鸟类的子类,而鸟类是百灵鸟类的超类。

 

类的定义后必须先实例化才能使用,类的初始化和函数调用类似。只要使用类名加圆括号的形式就可以初始化一个类。类初始后会产生一个对象

说明:

# >>>a=human()  是human类的实例化    

#>>>a是查看对象a

#>>>a.sex  是访问sex属性,a.age是访问age属性

 

在python中,当创建一个类以后就可以通过类名访问其属性。如果直接使用类名修改其属性,那么将影响已经初始化的对象。

>>>human.age

>>>human.age=23

 

①创建自己的类:

_metaclass_=type    #确定使用新式类

Class Person:

    Def setName(self,name):   #定义setName方法

        Self.name=name

   Def geName(self):             #特殊的变量:self     # 表示对象本身

       Return self.name

   Def greet(self):

       Print “Hello,World! I’m %s.”%self.name

 

②创建实例

 

4.对象的特性、函数和方法

1)方法的定义:在类的内部使用def关键字可以为类定义一个方法,注意的是:必须包含一个参数“self”,且“self”必须为第一个参数。

    方法将它的第一个参数绑定到所属的实例上。因此这个参数不必提供。

 

5.类的属性

类的属性实际上是类内部的变量,确切的说:称作类的公有属性

类的外部属性:类的外部不能对其属性进行操作。以双下划线开始

>>>class book:

       __author=’’

       __age=’’

       __name=’’

       __price=’’

…

>>>a=book()

>>>a.__age         #试图访问对象的_age私有属性,结果导致错误。

 

 

Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机。毕竟在使用对象之前应该知道该如何使用。但是,可以用一起小技巧达到私有特性的效果。

为了让方法或者特性变为私有(从外部无法访问),只要在它的名字之前加上双下划线即可。

Class Secretive:

     Def __inaccessible(self):

          Print “Bet you can’t see me…”

     Def accessible(self):

          Print “The secret message is:”

          Self.__inaccessible()

现在___inaccessilbe从外界是无法访问,而在类内部还能使用(比如从accessilbe)访问:

>>>s=Secretive()

>>>s.__inaccessible()

 

l  类的名称空间:class namespace   表示你把数据保存在变量中,对他们按名称空间进行分组。本身没有任何属性的类。

如:class MyData(object):

        pass

 

     下面的两个语句几乎等价:

Def foo(x): return x*x

Foo=lambda x:x*x

这个命名空间(名称空间)可由类内所有成员访问。

>>>class C:

         Print”Class C being defined…”

Class C being defined…

 

上面的代码中,在类作用域内定义了一个可供所有变量(实例)访问的变量,有来计算类的成员数量。注意:init用来初始化所有实例。

 

指定超类:

子类可以扩展超类的定义,将其它类名写有class语句后的圆括号内可以指定超类:

Class Fliter:

     Def init(self):

        Self.blocked=[]

     Def fliter(self.sequence) :

        Return[x for x in sequence if x not in self.blocked ]

Class SPAMFilter(Fliter):

     Def init(self):

         Self.blocked=[‘SPAM’]

Filter是个用于过滤序列的通用类,事实上它不能过滤任何东西:

>>>f=Fliter()

>>>f.init()

>>>f.filter([1,2,3])

 

调查继承:

如果想查看一个类是否是另一个的子类,可以使用内建的issubclass函数。

>>>issubclass(SPAMFilter,Filter)

True

 

构造方法:

在Python中创建一个构造方法很容易,只要把init方法的名字从简单的init修改为魔法版本:__init__即可。构造方法和其它方法不同的地方在于,当一个对象被创建后,会立即调用构造方法。

 

实例:

 1 # -*-coding:utf-8-*-
 2 
 3 class Person:
 4     #__init__()称为构造方法或初始化方法,目的是初始化实例的一些属性
 5     def __init__(self,name,age,sex):
 6         self.name = name
 7         self.age = age
 8         self.sex = sex
 9 
10     #定义一个普通方法,至少有一个self参数
11     def teacher(self,city):
12         print ("定义一个普通方法")
13         print ("My name: " + self.name)
14         self.age = self.age + 10 
15         self.city = city
16 
17         return self.age,self.city
18         
19 
20     @classmethod
21     def class_func(cls):
22         print ('定义一个类方法,至少有一个cls参数')
23     
24     @staticmethod
25     def static_func():
26         print ("定义一个静态方法,无默认参数")
27 
28 
29 if __name__ == "__main__":
30     #类的实例化,创建一个对象
31     p = Person('Tom',12,'Man')
32     #调用普通方法
33     print (p.teacher('zhangjiajie'))
34     #调用类方法和静态方法
35     print (p.class_func())
36     print (p.static_func())

 

 

 

posted @ 2013-11-07 20:12  沉默的云  阅读(277)  评论(0编辑  收藏  举报