python语言---类

类的结构:

1.使用面向对象开发,第一步是设计类

2.使用 类名() 创建对象,创建对象的动作有两步

             1.在内存中为对象分配空间

             2.调用初始化方法__init___ 为对象初始化

3.对象创建后,内存中就有了一个对象的实实在在的存在--实例

因此:

1.创建出来的对象叫做类的实例

2.创建对象的动作叫做实例化

3.对象的属性叫做实例属性

4.对象调用的方法叫做实例方法

在程序执行时:

1.对象各自拥有自己的实例属性

2.调用对象的方法,可以通过self访问自己的属性以及调用自己的方法

结论:

1.每一个对象都有自己独立的内存空间,保存各自不同的属性

2.多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部

类的设计:

在程序开发中,要设计一个类,通常需要满足以下三个要求:

(1)类名:这类事物的名字,满足大驼峰命名法。

(2)属性:这类事物具有什么样的特征。

(3)方法:这类事物具有什么样的行为。

定义简单的类(只包含方法)示例:

       class 类名/类名()/类名(object): ---有object的指的是新类(继承自object类),无object的指的是旧类

            def 方法1(self,参数列表)

                pass

            def 方法2(self,参数列表)

                pass

       对象变量=类名()

注意:当一个类定义完成之后,要对这个类进行具体实现,就要创建对象。

     那一个对象调用了类中的方法,self就是对哪一个对象的引用。

实例演练

1.创建类,输出'小猫爱吃鱼,小猫要喝水’

class cat():

   def eat(self):

         print '小猫爱吃鱼'

   def drink(self):

         print '小猫要喝水'

tom=cat()

tom.eat()

tom.drink

注意:对象只要被创建,会被立即分配内存地址。

       (1)print 对象名(默认输出的是16进制地址)

       (2)addr=id(对象名)

           print '%x' %addr

(1)和(2)都是对内存地址进行查看,并且结果相同

python语言---类

python语言---类

实例验证:同一个类创建不同的对象,所分配的地址也不同

class cat():

   def eat(self):

         print '小猫爱吃鱼'

   def drink(self):

         print '小猫要喝水'

tom=cat()

tom.eat()

tom.drink()

print tom

lily=cat()

lily.eat()

lily.drink()

print lily

python语言---类

实例验证:同一个类创建相同的对象,所分配的地址相同

class Cat():

    # 哪一个对象调用的方法,self就是哪一个对象的引用

    def eat(self):

        print '%s love fish' % self.name

    def drink(self):

        print '小猫要喝水'

#创建一个猫对象

lazy_cat = Cat()

lazy_cat.name = 'miaomiao'

lazy_cat.eat()

lazy_cat.drink()

print lazy_cat

 

lazy_cat2 = lazy_cat

print lazy_cat2

python语言---类

12   12    12    12    12    12    12    12   12

初始化方法(__init__(self)):

我们现在已经知道了使用'类名()'就可以创建一个对象,当使用'类名()'创建对象时,python的

解释器会自动执行以下操作:

    1.为对象在内存中分配空间;

    2.调用初始化方法为对象的属性设置初始值--初始化方法(__init__),__init__是对象的内置方法,

      初始化方法是专门用来定义一个类具有那些属性的方法,其实和C++里的构造函数特别相似。

在__init__方法内部使用self.属性名 = 属性的初始值 就可以内部定义属性

使用类名()创建对象的时候,会自动调用初始化方法

python语言---类

实例演练:

class cat():

   def eat(self):

         print '小猫爱吃鱼'

   def drink(self):

         print '小猫要喝水'

   def __init__(self):

       print '这是初始化方法'

       self.name=raw_input('请输入名字:')

tom=cat()

print tom.name

python语言---类

在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造

1.把希望设置的属性值,定义成__init__方法的参数

2.在方法内部使用self.属性名 = 形参 接收外部传递的参数

3.在创建对象时,使用类名(属性1,属性2..)调用

class cat():

   def __init__(self,new_name):

       print '这是初始化方法'

       self.name=new_name

ss=cat('tom')

print '%s爱吃鱼'%ss.name

python语言---类

注意:在类中,任何方法都可以使用self.name

内置方法:

(1)__del__(self)

 (2)__str__(self)

__del__(self)销毁前方法

在python中,当使用‘类名()’创建对象时,为对象分配完空间后,自动调用__init__()方法,

当一个对象被从内存中销毁前,会自动调用__del__方法(__del__方法是最后一步被执行的)。

class cat():

   def __init__(self,new_name):

       print '这是初始化方法'

       self.name=new_name

   def __del__(self):

       print '这是销毁方法'

ss=cat('tom')

print '%s爱吃鱼'%ss.name

python语言---类

注意:这个代码的“print '%s爱吃鱼'%ss.name”是在类的外部给对象增加属性。然而在日常开发中,

不推荐在类的外部给对象增加属性,因为如果在运行时,没有找到属性,程序会报错。

class cat():

   def __init__(self,new_name):

       print '这是初始化方法'

       self.name=new_name

   def __del__(self):

       print '这是销毁方法'

ss=cat('tom')

print '%s爱吃鱼'%ss.trtijij

注意:ss.trtijij是对象没有的属性

python语言---类

内置方法(__str__)

在python中,输出对象名时(print 对象名),默认情况下,会输出这个对象是由那个类创建的,

以及在内存中的地址(16进制表示)。而使用__str__方法可以输出我们自定义的内容。

无__str__时的“print 对象名”输出:

python语言---类

python语言---类

有__str__时的“print 对象名”输出:

python语言---类