看下面代码:
class LineInfo():
Num = 4
def __init__(self):
#self.Num = 1 #Num of ':' + 1
self.len = 2 #len of str before ':' or '\n'
self.LineNum = 3
def say(self1):
self1.Num = 0
LineInfoObj = LineInfo()
print(LineInfoObj.Num)
# LineInfoObj.say()
# print(LineInfoObj.Num)
输出:
4
稍作改动:
class LineInfo():
Num = 4
def __init__(self):
self.Num = 1 #Num of ':' + 1
self.len = 2 #len of str before ':' or '\n'
self.LineNum = 3
def say(self1):
self1.Num = 0
LineInfoObj = LineInfo()
print(LineInfoObj.Num)
# LineInfoObj.say()
# print(LineInfoObj.Num)
输出:
1
再次改动
class LineInfo():
Num = 4
def __init__(self):
self.Num = 1 #Num of ':' + 1
self.len = 2 #len of str before ':' or '\n'
self.LineNum = 3
def say(self1):
self1.Num = 0
LineInfoObj = LineInfo()
print(LineInfoObj.Num)
LineInfoObj.say()
print(LineInfoObj.Num)
输出:
1
0
总结:
self代表对象本身的引用
对象创建时自动调用__init__方法,将类变量Num改为1
调用方法say时将类变量Num改为0
再次改动
class LineInfo():
Num = 4
def __init__(self):
self.Num = 1 #Num of ':' + 1
self.len = 2 #len of str before ':' or '\n'
self.LineNum = 3
def say(self1):
self1.Num = 0
LineInfoObj = LineInfo()
print(LineInfoObj.Num)
LineInfoObj.say()
print(LineInfoObj.Num)
print(LineInfo.Num)
输出值:
1
0
4
原因:self指代的是对象,而不是类,类的变量仍然为原来的值4
类属性传入实例方法:
class CLanguage:
bb = 1
def info(self, b, c):
self.b = CLanguage.bb + b
self.c = c
print(self,"正在学 Python")
print(self.b + c)
obj = CLanguage()
obj.info(2,3)
obj.bb = 10
obj.info(2,3)
obj2 = CLanguage()
obj2.bb = 20
obj.info(2,3)
obj2.info(2,3)
CLanguage.bb = 2
obj.info(2,3)
obj2.info(2,3)
输出:
<__main__.CLanguage object at 0x00000200EBDE5940> 正在学 Python
6
<__main__.CLanguage object at 0x00000200EBDE5940> 正在学 Python
6
<__main__.CLanguage object at 0x00000200EBDE5940> 正在学 Python
6
<__main__.CLanguage object at 0x00000200EBDE59D0> 正在学 Python
6
<__main__.CLanguage object at 0x00000200EBDE5940> 正在学 Python
7
<__main__.CLanguage object at 0x00000200EBDE59D0> 正在学 Python
7
对象属性传入实例方法:
class CLanguage:
bb = 1
def info(self, b, c):
self.b = self.bb + b
self.c = c
print(self,"正在学 Python")
print(self.b + c)
obj = CLanguage()
obj.info(2,3)
obj.bb = 10
obj.info(2,3)
obj2 = CLanguage()
obj2.bb = 20
obj.info(2,3)
obj2.info(2,3)
CLanguage.bb = 2
obj.info(2,3)
obj2.info(2,3)
输出:
<__main__.CLanguage object at 0x00000200EBDE5A30> 正在学 Python
6
<__main__.CLanguage object at 0x00000200EBDE5A30> 正在学 Python
15
<__main__.CLanguage object at 0x00000200EBDE5A30> 正在学 Python
15
<__main__.CLanguage object at 0x00000200EBDE5970> 正在学 Python
25
<__main__.CLanguage object at 0x00000200EBDE5A30> 正在学 Python
15
<__main__.CLanguage object at 0x00000200EBDE5970> 正在学 Python
25