初学python,在遇到类与对象时,小白就蒙了,于是呈上我的笔记,大家共同学习。
一.对象
什么是对象,面向对象编程,可不是对着男/女朋友编程,而是一种思维模式,举个例子,洗衣服:要想洗衣服,用面向过程编程思维来想,那就是把衣服放入洗衣机,倒入洗衣液,然后点击洗衣机的开始按钮,最后洗完把衣服晾干。这种通过洗衣服的过程来进行思考问题的方式,叫做面向过程编程。
而面向对象编程,是一种以对象为中心的编程思想。它不需要去考虑过程,而是考虑过程中能够所需要的对象,比如在这里,衣服\洗衣机\洗衣液都是对象,类:就是多个类似事物组成的群体的统称。类能够帮助我们快速理解和判断事物的归属。
在Python中,我们从一开始,就接触了类:
print(type('666')) # <class'str'>
print(type(6666)) # <class'int'>
print(type([6666])) #<class'list'>
运行上面代码后,我们发现,'666’属于’str’字符串类;6666属于’int’整数类;[6666]属于’list’类。在Python中,我们把类的个例叫做“实际的例子” 简称“实例”。
一切皆’对象’
在Python中,它把所有的事物都称为对象, 对象包含类与实例
;也就是说,类叫做对象,实例也叫做对象。比如str是类对象,'hello’就是实例对象。 一切皆对象。
羽泉、你、我都是音乐人------这句话,在Python江湖中翻译过来就是: 羽泉、你、我都属于“音乐人”这个类,羽泉、你、我都是“音乐人”这个类中的实例;我们都存在一些相同点:喜欢音乐、艺名、会唱歌、能跳舞。
这些共同点,就是我们区别于其他类的依据。其实,我们还可以对这些相同点进行细分:
第一种,用来描述事物性质的,比如:喜欢音乐、艺名;
第二种,用来描述事物能做什么,比如:会唱歌、能跳舞。
在Python中,我们把第一种共同点称为属性(what),第二种共同点称为方法(how)
比如,我们认识的字符串,属性有:引号,下标;方法有:都可以进行拼接操作,每个类都有自己的独特的属性attribute和方法method,是这个类的所有实例都共享的。换言之,每个实例都可以调用类中所有的属性和方法。
属性:私有属性和公有属性详解 来看一个栗子:
class Musician():
loveMusic = 'we'#属性lovemusic,值为we
def sing(self):#方法名(self)
print('唱歌')#方法的内容
类属性的写法就是变量的写法,这里只是换了一个叫法,类名称首字母一定要大写大写大写
下面,创建一个”明星”类,并为其创建一个属性(墨镜)和一个方法(与粉丝合影)。
class Star:
glasses = "墨镜"
def photo(self):
print("与粉丝拍照")
二.类的调用
依旧以音乐人为栗:
class Musician:
loveMusic = 'we'
def sing(self):
print('唱歌')
laoFan = Musician()
print("音乐人老樊")
laoFan.sing()
类的实例化
语法:实例名 = 类名()
栗子:laofan =Musician
含义:通过Musician这个类创建一个实例叫laofan,laofan这个实例可以调用Msician这个类的属性和方法
class Musician:
loveMusic = 'we'
def sing(self):
print('我在唱歌')
laoFan = Musician()
print("音乐人老樊")
print(laoFan.loveMusic)
laoFan.sing()
可通过laoFan.loveMusic来获取属性的值we
再通过print打印出来。
通过laoFan.sing()这句代码,调用了类方法sing(),直接打印出“我在唱歌”。这就是最简单的调用类属性与类方法。当然一个类可以创建多个实例。
self参数
首先明确下self的作用:self会在类的实例化中接收传入的数据, 在代码中运行。
举个栗子:
class Musician:
name = 'eminem'
def sing(self,person):
print(person+'is rapper')
singer = Musician()
print(singer.name)
singer.sing('eminem')
成功运行,感觉很完美。其实,已经把代码写累赘了。
因为,只要在sing()方法内部调用类属性,就可以实现同样的功能,没有必要把参数再传递一遍。
class Musician:
name = 'eminem'
def sing(self):
print(self.name+'is rapper')
singer = Musician()
print(singer.name)
singer.sing()
这就是self的独特之处,它的作用就是先在类方法中占一个位置,当实例创建调用类方法的时候,它就会将self.name也就是类中的name放入方法中
class Musician:
name = 'eminem'
def hello(self):
print('hello,大家好')
def sing(self):
self.hello()
print(self.name+'rapper')
singer = Musician()
singer.sing()
同理,如果类中的一个类方法需要调用另一个类方法,依然需要使用self。
创建实例后,实例调用方法singer.sing(),在singer.sing()方法执行的时候,会自动调用self.hello()方法,因此’hello,大家好’这段文字也会出现。
三.初始化方法
每个类中都存在一个初始化方法,这个方法不需要调用,在通过类创建实例对象的时候初始化方法会自动执行。定义初始化方法:def __init__(self):
,init两边是双下划线。
class Musician:
def __init__(self):
print('你好,这里是初始化方法init')
liRongHao = Musician()
利用init初始化方法的特点,我们可以在初始化方法中完成类属性的创建及类属性的赋初值。
class Musician:
def __init__(self):
self.glass = "墨镜"
self.microphone = "many"
def intr(self):
print('我出门必须戴%s' %self.glass)
print('我有%s个麦克风' %self.microphone)
silence = Musician()
silence.intr()
初始化方法中,除了可以设置固定值之外,还可以接收其他参数,使得传入的数据灵活多变。
class Musician:
def __init__(self,name,anotherName,music):
self.name = name
self.anotherName = anotherName
self.music = music
def intr(self):
print('各位歌迷好,我是%s' %self.name)
print('熟悉我的朋友都叫我%s' %self.anotherName)
def sing(self):
print('我为大家唱一首%s' %self.music)
jam = Musician('萧敬腾','雨神','王妃')
jam.intr()
jam.sing()
init_(self,name,anotherName,music)与Musician(‘萧敬腾’,‘雨神’,‘王妃’)。大家会发现,定义初始化方法中,拥有self,name,anotherName,music四个参数,在类创建实例的时候,只传入了三个参数。
这是因为self属性只会在方法创建的时候出现,方法调用时就不需出现了。
这里参数’萧敬腾’,‘雨神’,'王妃’会与name,anotherName,music一一对应。
因此下面的类方法会通过self.属性名一一获取传入的数据。
这就是初始化方法init的使用。
若有不足,敬请指正。