Python类中属性、方法与self的关系

一、属性

1、如果属性直接定义在类中而不是在类的方法中

class Test():
    a=1
    b=3

那么该属性既是该类的属性,也是该类的实例的属性。

Test.a

输出:1

test=Test()
test.a

输出:1
2、如果属性定义在类的方法中
(1)参数中不加self

class Test():
    def fun():
        b=4

那么该属性既不是该类的属性也不是该类的实例的属性,它只是该方法(此处指fun()方法)的局部变量。

test=Test()
test.b

输出:
在这里插入图片描述

Test.b

输出:
在这里插入图片描述
(2)参数中加self

class Test():
    def fun(self):
        b=4
        self.c=5
test=Test()

此时属性b仍然既不是该类的属性也不是该类的实例的属性,它只是该方法(此处指fun()方法)的局部变量。但是属性c虽然不是该类的属性,确是该类的实例的属性。

test.fun()
test.c

输出:5
*注意,在构造函数__init__中,由于类实例化后构造函数自动执行,直接调用属性即可,无需重复执行构造函数。

class Test():
    def __init__(self):
        b=4
        self.c=5
test=Test()
test.c

输出:5

二、方法

1、关于self
(1)如果在定义方法时加了self,那么该方法是该类的实例的方法,而不是该类的方法。

class Test():
    def fun(self):
        self.a=1
        self.b=2
test=Test()
test.fun()#fun()为实例test的方法,调用成功
test.a

输出:1

Test.fun()#fun()不是Test类的方法,调用失败

输出:
在这里插入图片描述
(2)如果在定义方法时未加self,那么该方法是该类的方法,而不是该类实例的方法。

class Test():
    def fun():
        a=1
        b=2
test=Test()
Test.fun()#fun()为类Test的方法,调用成功
test.fun()#fun()不是实例test的方法,调用失败

输出:
在这里插入图片描述

2、关于构造函数__init__
构造函数具有初始化作用,在类实例化时即自动执行。此处需注意构造函数中一定要加self参数,否则实例化无法成功。如下所示:

class Test():
    def __init__():
        a=1
        b=2
test=Test()

输出:
在这里插入图片描述
因为上文中讲到只有加self的方法才是类的实例的方法,才能够被实例调用。实例化的时候程序自动执行__init__方法,默认参数为self.

参数中增加self后即可实例化成功。

class Test():
    def __init__(self):
        self.a=1#a为test属性
        b=2#b既不是test的属性,也不是Test的属性
test=Test()
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值