一、self参数
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。虽然self可以改成其他名称,但是遵循惯例有利于程序的可读性
如果你的类方法中没有一个参数,你依旧必须拥有self参数!
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
从结果来看,可以看出,self代表的是类的实例,代表当前对象的地址(相当于C++的指针),self._ class_指向类,且self不是关键字。可以其他代替,但我上面说了,最好遵循惯例!
我下面对类解释的时候也会再解释self
二、类,方法,继承,_ init_方法,类变量,对象变量
1、类
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
2、方法
就是类中的函数
3、继承
实现代码重用
4、_ init_方法
该方法会在类的对象实例化时立即执行
def __init__(self,name):
self.name=name
print('Robot name is {}'.format(self.name))
5、类变量
可以被属于该类的所有实例访问(公有),当然如果你想变成私有,在变量名前面加两个下划线如:__popo
6、对象变量
由类的每个独立的对象或实例所拥有
直接实例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/16
class Robot:
__population=0#类私有变量
def __init__(self,name):#init函数,初始化作用
self.name=name
print('Robot name is {}'.format(self.name))
Robot.__population+=1
def die(self):
print('The Robot was die')
Robot.__population-=1
def say_hi(self):
print('{} hello everyone'.format(self.name))
@classmethod #意为下面的方法为类方法,而不是对象的方法,调用是直接类名.函数名。为什么是类方法,其实看函数的作用就可以了
def how_many(cls):
print('Have {} Robots'.format(cls.__population))
class RobotChi(Robot):#继承了Robot类
def __init__(self,name,age):#初始化,这里显示调用了基类的构造函数,如果没有init方法,也会自动调用基类的构造函数
Robot.__init__(self,name)
self.age=age
self.name=name
print('RobotChi name is {}'.format(self.name))
def tell(self):
Robot.say_hi(self)
print('age:{}'.format(self.age))
def say_hi(self):
Robot.say_hi(self)
print('My name is: {}'.format(self.name))
man=Robot('xlj')#输出:Robot name is xlj
man.say_hi()#输出:xlj hello everyone
man.die()#输出:The Robot was die
Robot.how_many()#输出:Have 0 Robots
manChi=RobotChi('bubu',12)#输出:Robot name is bubu Robot name is bubu
manChi.say_hi()#输出:bubu hello everyone My name is: bubu
manChi.tell()#输出:bubu hello everyone age:12
三、判断回文(输入输出基础)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/17
def reverse(text):
return text[::-1]
def is_huiwen(text):
return text==reverse(text)
something=input('Enter text:')
if is_huiwen(something)==1:
print('yes')
else:
print('no')
四、文件操作
r:以读方式打开文件,可读取文件信息。
w:以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容
a:以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建
b:以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。
r+:以读写模式打开
w+:以读写模式打开 (参见 w )
a+:以读写模式打开 (参见 a )
rb:以二进制读模式打开
wb:以二进制写模式打开 (参见 w )
ab:以二进制追加模式打开 (参见 a )
rb+:以二进制读写模式打开 (参见 r+ )
wb+:以二进制读写模式打开 (参见 w+ )
ab+:以二进制读写模式打开 (参见 a+ )
下面是一个小demo:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/17
poem="""\
This is my poem
I think this is very beautiful
hahag
"""
f=open(r'F:\1.txt','w')
f.write(poem)
f.close()
f=open(r'F:\1.txt')
while True:
line=f.readline()
if len(line)==0:
break
else:
print(line,end='')
f.close()
五、Pickle
Python中可以使用 pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。具体用法如下
说的直白一点,就是一个存储和获取的工具,pickle把Python的数据结构用另外一种简单的形式存储到文件中,然后方便转移和传播,然后在用同一样的方法还原回去。依靠dump和load,可以轻松实现
pickle.dump(obj, file[, protocol])
序列化对象,并将结果数据流写入到文件对象中
pickle.load(file)
反序列化对象。将文件中的数据解析为一个Python对象(即读取数据)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/17
import pickle#导入pickle模块
shoplistfile='shoplist.data'
shoplist=['apple','mango','carror']
f=open(shoplistfile,'wb')#write(写入)+binary(二进制)
pickle.dump(shoplist,f)#pickle.dump(obj, file[, protocol])
f.close()
del shoplist#删除shoplist序列,此时其实已经将其中的内容存储了
f=open(shoplistfile,'rb')
list=pickle.load(f)#pickle.load(file)
print(list)
其实执行这段代码已经将shoplist中的数据保存到了shoplist.data中
输出: