python基础-面向对象编程
Posted soaeon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础-面向对象编程相关的知识,希望对你有一定的参考价值。
类和对象
面向对象编程的2个非常重要的概念:类和对象
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象
1. 类
人以类聚 物以群分。
具有相似内部状态和运动规律的实体的集合(或统称、抽象)。
具有相同属性和行为事物的统称
类是抽象的,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在。一个类可以找到多个对象
2. 对象
某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。
可以是直接使用的
3. 类和对象之间的关系
小总结:类就是创建对象的模板
定义类
定义一个类,格式如下:
class 类名:
方法列表
demo:定义一个Car类
# 定义类
class Car:
# 方法
def getCarInfo(self):
print(‘车轮子个数:%d, 颜色%s‘%(self.wheelNum, self.color))
def move(self):
print("车正在移动...")
说明:
- 定义类时有2种:新式类和经典类,上面的Car为经典类,如果是Car(object)则为新式类
- 类名 的命名规则按照"大驼峰"
创建对象
通过上一节课程,定义了一个Car类;就好比有车一个张图纸,那么接下来就应该把图纸交给生成工人们去生成了
python中,可以根据已经定义的类去创建出一个个对象
创建对象的格式为:
对象名 = 类名()
创建对象demo:
# 定义类 class Car: # 移动 def move(self): print(‘车在奔跑...‘) # 鸣笛 def toot(self): print("车在鸣笛...嘟嘟..") # 创建一个对象,并用变量BMW来保存它的引用 BMW = Car() BMW.color = ‘黑色‘ BMW.wheelNum = 4 #轮子数量 BMW.move() BMW.toot() print(BMW.color) print(BMW.wheelNum)
总结:
- BMW = Car(),这样就产生了一个Car的实例对象,此时也可以通过实例对象BMW来访问属性或者方法
- 第一次使用BMW.color = ‘黑色‘表示给BMW这个对象添加属性,如果后面再次出现BMW.color = xxx表示对属性进行修改
- BMW是一个对象,它拥有属性(数据)和方法(函数)
__init__()
方法
想一想:
在上一小节的demo中,我们已经给BMW这个对象添加了2个属性,wheelNum(车的轮胎数量)以及color(车的颜色),试想如果再次创建一个对象的话,肯定也需要进行添加属性,显然这样做很费事,那么有没有办法能够在创建对象的时候,就顺便把车这个对象的属性给设置呢?
答:
__init__()
方法
<1>使用方式
def 类名:
def __init__():
pass
<2>__init__()
方法的调用
# 定义汽车类 class Car: def __init__(self): self.wheelNum = 4 self.color = ‘蓝色‘ def move(self): print(‘车在跑,目标:夏威夷‘) # 创建对象 BMW = Car() print(‘车的颜色为:%s‘%BMW.color) print(‘车轮胎数量为:%d‘%BMW.wheelNum)
总结1
当创建Car对象后,在没有调用__init__()
方法的前提下,BMW就默认拥有了2个属性wheelNum和color,原因是__init__()
方法是在创建对象后,就立刻被默认调用了
想一想
既然在创建完对象后__init__()
方法已经被默认的执行了,那么能否让对象在调用__init__()
方法的时候传递一些参数呢?如果可以,那怎样传递呢?
# 定义汽车类 class Car: def __init__(self, newWheelNum, newColor): self.wheelNum = newWheelNum self.color = newColor def move(self): print(‘车在跑,目标:夏威夷‘) # 创建对象 BMW = Car(4, ‘green‘) print(‘车的颜色为:%s‘%BMW.color) print(‘车轮子数量为:%d‘%BMW.wheelNum)
总结2
__init__()
方法,在创建一个对象时默认被调用,不需要手动调用__init__(self)
中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)
中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
__init__(self)
中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
定义__str__()
方法
class Car: def __init__(self, newWheelNum, newColor): self.wheelNum = newWheelNum self.color = newColor def __str__(self): msg = "嘿。。。我的颜色是" + self.color + "我有" + int(self.wheelNum) + "个轮胎..." return msg def move(self): print(‘车在跑,目标:夏威夷‘) BMW = Car(4, "白色") print(BMW)
总结:
- 在python中方法名如果是
__xxxx__()
的,那么就有特殊的功能,因此叫做“魔法”方法 - 当使用print输出对象的时候,只要自己定义了
__str__(self)
方法,那么就会打印从在这个方法中return的数据
理解self
# 定义一个类 class Animal: # 方法 def __init__(self, name): self.name = name def printName(self): print(‘名字为:%s‘%self.name) # 定义一个函数 def myPrint(animal): animal.printName() dog1 = Animal(‘西西‘) myPrint(dog1) dog2 = Animal(‘北北‘) myPrint(dog2)
执行结果:
总结:
- 所谓的self,可以理解为自己
- 可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思
- 某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可
__del__()
方法
创建对象后,python解释器默认调用__init__()
方法;
当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()
方法
import time class Animal(object): # 初始化方法 # 创建完对象后会自动被调用 def __init__(self, name): print(‘__init__方法被调用‘) self.__name = name # 析构方法 # 当对象被删除时,会自动被调用 def __del__(self): print("__del__方法被调用") print("%s对象马上被干掉了..."%self.__name) # 创建对象 dog = Animal("哈皮狗") # 删除对象 del dog cat = Animal("波斯猫") cat2 = cat cat3 = cat print("---马上 删除cat对象") del cat print("---马上 删除cat2对象") del cat2 print("---马上 删除cat3对象") del cat3 print("程序2秒钟后结束") time.sleep(2)
运行结果:
总结:
- 当有1个变量保存了对象的引用时,此对象的引用计数就会加1
- 当使用del删除变量指向的对象时,如果对象的引用计数不会1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除
以上是关于python基础-面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章