一、属性
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()