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)都是对内存地址进行查看,并且结果相同
实例验证:同一个类创建不同的对象,所分配的地址也不同
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
实例验证:同一个类创建相同的对象,所分配的地址相同
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
12 12 12 12 12 12 12 12 12
初始化方法(__init__(self)):
我们现在已经知道了使用'类名()'就可以创建一个对象,当使用'类名()'创建对象时,python的
解释器会自动执行以下操作:
1.为对象在内存中分配空间;
2.调用初始化方法为对象的属性设置初始值--初始化方法(__init__),__init__是对象的内置方法,
初始化方法是专门用来定义一个类具有那些属性的方法,其实和C++里的构造函数特别相似。
在__init__方法内部使用self.属性名 = 属性的初始值 就可以内部定义属性
使用类名()创建对象的时候,会自动调用初始化方法
实例演练:
class cat():
def eat(self):
print '小猫爱吃鱼'
def drink(self):
print '小猫要喝水'
def __init__(self):
print '这是初始化方法'
self.name=raw_input('请输入名字:')
tom=cat()
print tom.name
在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__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
注意:在类中,任何方法都可以使用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
注意:这个代码的“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是对象没有的属性
内置方法(__str__)
在python中,输出对象名时(print 对象名),默认情况下,会输出这个对象是由那个类创建的,
以及在内存中的地址(16进制表示)。而使用__str__方法可以输出我们自定义的内容。
无__str__时的“print 对象名”输出:
有__str__时的“print 对象名”输出: