python基础学习(十一)——类和对象、self、cls、魔法函数(__init__、__del__、__new__,__str__()以及id()

类是抽象的,对象是类的实例。
类(Class)由三部分构成:类名、类的属性(变量)、类的方法(函数)

(1)self和cls以及类中的函数

cls用来表示类本身
self用来表示对象(类似于c++中的this),self代表类的实例,而非类。
把self换成this,结果也一样,但Python中最好用约定俗成的self。

和普通数相比,在类中定义的函数只有一点不同,就是第一参数永远是类的本身实例变量self,并且调用时,不用传递该参数。除此之外,类的方法(函数)和普通函数没啥区别,既可以用默认参数、也可以用可变参数或者关键字参数(*args是可变参数,args接收的是一个tuple,**kw是关键字参数,kw接收的是一个dict)。

class Test:
    def test1(self):
        print(self)
        print(self.__class__)

t = Test()
t.test1()

#从上面的例子可以看出 self代表的是类的实例。而self.__class__则指向类。
#注意:把self换成this,结果也一样,但Python中最好用约定俗成的self。

在这里插入图片描述
self可以不写吗?

在Python解释器的内部,当我们调用t.test1()时,实际上Python解释成Test.test1(t),也就是把self替换成了类的实例。
如果不写self,见如下示例代码,从结果可以看出,报错了。
运行时提醒错误如下:test1在定义时没有参数,但是我们运行时强行传了一个参数。


原因:t.test1()等同于Test.test1(t),所以程序提醒我们多传了一个参数t。
这里实际上已经部分说明了self在定义时不可以省略。(当然,如果我们的定义和调用时均不传类实例是可以的,下面有示例代码)

class Test:
    def test1():
        print('hhh')
        
t = Test()
t.test1() #会报错
    

在这里插入图片描述

当然,如果我们的定义和调用时均不传类实例是可以的

#当然,如果我们的定义和调用时均不传类实例是可以的
class Test:
    def test1():
        print(__class__)

Test.test1()

在这里插入图片描述

(2)__init __ 、__new __、__del __

__init __ 、__new __更多内容链接1
__init __ 、__new __更多内容链接2

__init __ 方法是Python最基本的魔术方法,通过此方法我们可以定义一个对象的初始操作,实际上它背后还有一个__new __方法。__new __是用来创建类并返回这个类的实例, 而__init __只是将传入的参数来初始化该实例。
对象生命周期调用结束时,__del __ 方法会被调用。

在这里插入图片描述
用于初始化(类似于构造函数):
(1)__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
(2)有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但se

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值