从0.1开始学Python——[18]

从0.1开始学Python——[18]


上次学习了一些关于类创建对象的知识,学习了类的概念,那么类如何定义才能发挥作用,我们需要继续学习。

类的定义

类和对象都是对现实生活中的事物或程序中的内容的抽象。生活中的事物,语言中的对象,实际上都可以概括为由两部分定义的东西:数据(或语言中的属性)和行为(或语言中的方法)。具有这两样东西,事物(对象)就变得有意义,因此,类的定义需要具有属性和方法。
在类的代码块里面,可以定义变量和函数,其中,定义的变量会变成所有实例的公共属性,也就是说所有用这个类创建的对象,都有以这个变量名为属性名的一项属性;类里面定义的函数叫方法,这些方法可以通过类里面所有的实例访问。这些类里面定义的属性和方法都是公共的,用这个类创建的所有对象都能访问。

class Jntm():
    koutouchan = '你干嘛~哈哈~嗨哎呦'
    anhao = '只因'
    
    def zhuangbei(self):
        print('背带裤')


kk = Jntm()
xjz = Jntm()
print(kk.anhao)
print(xjz.anhao)
print(kk.koutouchan)
print(xjz.koutouchan)
kk.zhuangbei()
xjz.zhuangbei()
只因
只因
你干嘛~哈哈~嗨哎呦
你干嘛~哈哈~嗨哎呦
背带裤
背带裤

要注意,定义方法和定义函数不太一样。调用函数的时候,定义了几个形参,就需要传输几个实参;但是调用方法的时候,会默认传递一个实参,这就要求定义方法的时候必须至少定义一个形参,比如上面的self。

属性和方法的查找

调用某属性的时候,Python会按照从当前对象到类的顺序依次查找,也就是说当前对象有这个属性名的属性就调用,没有才去类里面找这个属性名的属性,都没有就报错。也就是说,从效果上来讲,如果直接给了某个对象一个某属性名的属性值,那这个属性值会覆盖改对象在类里面的同属性名的属性值。

kk.anhao = '厉不厉害你坤哥'
print(kk.anhao)
print(xjz.anhao)
厉不厉害你坤哥
只因

另外,类对象和实例对象都能保存属性和方法,不过具体咋保存应该视情况而定。比如一些实例们共有的属性,那么保存到类中显然比较合适,而一些实例独有的则最好保存到实例里面。一般来讲,在编程中,属性多保存到实例里面,而方法保存在类对象里面。
如果用del删除对象的某个属性,那再查找的时候又会找到原先在类里面的同属性名属性。

del kk.anhao
print(kk.anhao)
只因

在方法中,无法直接访问类里面的属性,和闭包原理不太一样,但是仍然可以访问到外部的属性

class Jntm():
    koutouchan = '你干嘛~哈哈~嗨哎呦'
    anhao = '只因'

    def zhuangbei(self):
        print('背带裤')
    def zwjs(self):
        print('%s大家好'% kk.who)

kk.who = '全民制作人们'
kk.zwjs()
全民制作人们大家好

然后,关于方法的参数的使用,之前讲到方法的调用会默认传递一个实参,默认传递的是第一个实参,而这第一个参数就是调用方法的对象本身,简而言之就是谁调用的这个默认实参就是谁,这就是上面定义方法的时候Python默认叫这个形参叫self的原因。于是,在方法中灵活调用对象的方式自然是用self去进行操作。

class Jntm():
    koutouchan = '你干嘛~哈哈~嗨哎呦'
    anhao = '只因'

    def zhuangbei(self):
        print('背带裤')
    def zwjs(self):
        print('%s大家好'% self.who)

kk.who = '全民制作人们'
xjz.who = '露出黑脚们'

kk.zwjs()
xjz.zwjs()
全民制作人们大家好
露出黑脚们大家好

也就是说用self.属性(方法)来灵活使用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值