python之类的有关概念,初始化方法,内置方法
1.面向对象
概述:
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
1.类的设计
在程序开发中,要设计一个类,通常需要满足以下三个需求:
(1).类名:这类事物的名字,满足大驼峰命名法
(2).属性:这类事物具有的特征
(3).方法:这类事物的行为(动作)
例1.
小明今年18岁,身高1.75,每天早上也要跑步,会去吃东西
小美今年16岁,身高1.65,每天不跑步,喜欢吃东西
Person() #类名
name #属性
age
height
run() #方法
eat()
例2.
一只黄色的狗狗叫大黄
看见生人旺旺叫
看见家人摇尾巴
Dog() #类名
name #属性
color
shout() #方法
shark()
经典类与旧式类:
经典式类(基类): 带有object 例如:class A(object)
旧式类(经典类): 没有object 例如:class A()
2.定义只包含方法的类
语法格式:
class 类名():
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
......
3.创建类对象
语法格式:
对象变量 = 类名()
实例:
需求:小猫爱吃鱼,小猫要喝水
代码1:
# 定义猫类
class Cat():
def eat(self):
print '小猫爱吃鱼'
def drink(self):
print '小猫要喝水'
# 创建猫对象
tom = Cat()
tom.eat()
tom.drink()
print tom # 输出的对象变量存储的地址
addr = id(tom)
print '%x' % addr # %x 打印格式为十六进制
print '%d' % addr # %d 打印格式为十进制
执行结果:
代码2:
class Cat():
def eat(self):
print '小猫爱吃鱼'
def drink(self):
print '小猫要喝水'
# 创建猫对象
tom = Cat()
tom.eat()
tom.drink()
print tom # 输出的对象变量存储的地址
#再创建一个猫对象
hellokitty = Cat()
hellokitty.eat()
hellokitty.drink()
print hellokitty # 用同一个类创建的两个不同的对象,其存储地址不同
# 创建一个与 tom 相同的猫对象
lazy_cat = tom
print lazy_cat # lazy_cat 与 tom 的储存地址相同
执行结果:
代码3:
# 定义猫类
class Cat():
# 哪一个对象调用的方法,self就是哪一个对象的引用
def eat(self):
print '%s爱吃鱼' % self.name
def drink(self):
print '%s要喝水' % self.name
# 创建猫对象
tom = Cat()
# 定义猫的属性:名字(此方法并不常用)
tom.name = 'tom'
tom.eat()
tom.drink()
print tom # 输出的对象变量存储的地址
执行结果:
2.初始化方法(定义属性)
当使用类名()创建对象时,python的解释器便会自动执行以下操作:
1.为对象在内存中分配空间---创建对象
2.调用初始化方法为对象的属性设置初始值---初始化方法(__init__)
初始化方法:
即为__init__方法,它是面向对象的内置方法,也是专门用来定义一个类具有那些“属性”的方法
语法格式:
1.简单格式(初始值为定值)
def __init__(self):
self.属性名 = 属性初始值
2.带有参数(列表)的格式(初始值可自行给定)
def __init__(self,参数1,参数2...):
self.属性名1 = '名字1'
self.属性名2 = '名字2'
.....
调用方法 格式:
对象变量.方法名()
调用属性 格式:
print 对象变量.属性名()
代码:
class Cat():
# 初始化方法定义属性(初始值为定值情形)
def __init__(self):
self.name = 'tom'
#在类中,任何方法都可以使用self.name
def eat(self):
print '%s喜欢吃鱼' % self.name
tom = Cat()
print tom.name
tom.eat()
执行结果:
3.内置方法
(1) __del__方法
在python中,当使用类名()创建对象时,为对象分配完空间后,会自动调用__init__方法
当一个对象被从内存中销毁前,会自动调用__del__方法
代码:
class Cat():
def __init__(self,new_name):
self.name = new_name
print '%s来了' % self.name
def __del__(self):
print '%s走了' % self.name
tom = Cat('tom')
print tom.name
# del tom
print '*' * 50
执行结果:
(2)__str__方法
在python中,使用python输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(默认是16进制)
如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法
代码:
class Cat():
def __init__(self,name):
self.name = name
def __str__(self):
# 必须返回一个字符串
return '我是%s' % self.name
tom = Cat('tom')
print tom # 输出的是__str__里的内容
执行结果: