面向对象编程的两个非常重要的概念:类和对象
区别:
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类。类就相当于制造飞机时的图纸,用它来进行创建出来的飞机就相当于对象。
类的构成:
类(Class) 由3个部分构成
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许对进行操作的方法 (行为)
范例:
魔法方法之__init__():
在以上的范例中我们给BMW这个对象添加了2个属性,wheelNum(车的轮胎数量)以及color(车的颜色),试想如果再次创建一个对象的话,肯定也需要进行添加属性,显然这样做很费事,那么有没有办法能够在创建对象的时候,就顺便把车这个对象的属性给设置呢?
答:__init__()方法
demo:
# 定义汽车类
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.__init__()方法,在创建一个对象时被默认调用,不需要手动调用
2.__init__(self)方法中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)
中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
3.__init__(self)
中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
魔法方法之__str__():
如果把BMW使用print进行输出的话,可以输出BMW对象在内存中的地址。但是当我们定义了__str__(self),我们再输出对象,那会就会打印这个方法return的数据。
demo:
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)
理解self:
有没有发现魔法方法中的第一个参数老是self,中文意思为自己,我们可以把self当做C++中类里的this指针,就是对象自身的意思;某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可