python:类与对象超超超级详解(属性与方法)

初学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的使用。
若有不足,敬请指正。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值