ホームページ >バックエンド開発 >Python チュートリアル >Python のオブジェクト指向と基本的な I/O 操作 (1)
1. I/O 操作:
open(name[,mode]) は file(name[,mode]) と同等です
モードの説明:
r は読み取り専用ファイルを開きます。存在する。
r+ は、読み取りと書き込みが可能なファイルを開きます。そのファイルは存在する必要があります。
w 書き込み専用ファイルを開きます。ファイルが存在する場合、ファイル長は 0 にクリアされます。つまり、ファイルの内容は消去されます。ファイルが存在しない場合は、ファイルを作成します。
w+ は読み取りおよび書き込み可能なファイルを開きます。ファイルが存在する場合、ファイルの長さはゼロにクリアされます。つまり、ファイルの内容は消去されます。ファイルが存在しない場合は、ファイルを作成します。
a 書き込み専用ファイルを追加モードで開きます。ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの末尾に追加されます。つまり、ファイルの元の内容は保持されます。
a+ 読み書き可能なファイルを追加モードで開きます。ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は、書き込まれたデータがファイルの末尾に追加されます。つまり、ファイルの元の内容は保持されます。
上記の形態素文字列には、rb、w+b、ab+ などの b 文字を追加できます。b 文字は、開かれたファイルが純粋なテキスト ファイルではなくバイナリ ファイルであることを関数ライブラリに通知するために追加されます。ただし、Linux を含む POSIX システムでは、この文字は無視されます。
In [1]: f = open('/tmp/test','w') In [2]: f.write('okokokok') In [3]: f.close()
は、次のようにLinuxで表示できます:
#cat /tmp/test okokokok
は、次のようにPython対話型インタープリタでも表示できます:
In [4]: f = open('/tmp/test','r') In [5]: f.read() Out[5]: 'okokokok' In [6]: f.close()
追加モード操作:
In [7]: f = open('/tmp/test','a') In [8]: f.write('hello') In [9]: f.close() In [10]: f = open('/tmp/test','r') In [11]: f.read() Out[11]: 'okokokokhello' In [12]: f.close()
組み合わせ使用モード:
In [13]: f = open('/tmp/test','r+') In [14]: f = open('/tmp/test','w+') In [15]: f = open('/tmp/test','a+')
ファイルを開いた後 (モードを選択できます)、ファイルを操作できます。一般的に使用されるメソッドをいくつか示します:
In [21]: f = open('/tmp/test','a+') In [20]: f. f.close f.fileno f.name f.readinto f.softspace f.writelines f.closed f.flush f.newlines f.readline f.tell f.xreadlines f.encoding f.isatty f.next f.readlines f.truncate f.errors f.mode f.read f.seek f.write
ipython の完全ビューではタブを使用できます。
read() はファイルの内容を読み取ります。
In [22]: f.read() Out[22]: 'okokokok\n'
write() はファイルの内容を追加モードで開き、最後に書き込み専用モードで開きます。以前のファイルの内容をクリアし、今回書き込まれた内容のみを保持します
In [22]: f.write('hello')
readline()は行ごとに読み取ります
In [29]: f.readline() Out[29]: 'okokokok\n' In [30]: f.readline() Out[30]: 'hello'
readlines()はすべてを読み取り、リストとして出力します。 lineはリストの要素です
In [32]: f.readlines() Out[32]: ['okokokok\n', 'hello']
tell()とseek():
tell()はポインタが現在どこを指しているかを説明します
seek()はポインタが指している場所を設定します
In [35]: f.tell() Out[35]: 9 In [36]: f.seek(0) In [37]: f.tell() Out[37]: 0
flush()は操作中のコンテンツを更新します
In [39]: f.flush()
next()は一度に1行だけ順番に読み込みます
In [41]: f.next() Out[41]: 'okokokok\n' In [42]: f.next() Out[42]: 'hello'
close()は開いているファイルを閉じます
In [44]: f.close()
いくつかの簡単な基本操作:
In [1]: a = 'hello to everyone' In [2]: a Out[2]: 'hello to everyone' In [3]: a.split() Out[3]: ['hello', 'to', 'everyone'] In [4]: a Out[4]: 'hello to everyone' In [5]: a.spli a.split a.splitlines In [5]: a.split('t') Out[5]: ['hello ', 'o everyone'] In [6]: a.split('o') Out[6]: ['hell', ' t', ' every', 'ne'] In [7]: a.split('o',1) Out[7]: ['hell', ' to everyone'] In [8]: list(a) Out[8]: ['h', 'e', 'l', 'l', 'o', ' ', 't', 'o', ' ', 'e', 'v', 'e', 'r', 'y', 'o', 'n', 'e'] In [14]: li = ['hello','everyone','ok'] In [15]: ';'.join(li) Out[15]: 'hello;everyone;ok' In [16]: 'hello {}'.format('everyone') Out[16]: 'hello everyone' In [17]: 'hello{}{}'.format('everyone',1314) Out[17]: 'hello everyone1314' In [18]: 'it is {}'.format('ok') Out[18]: 'it is ok'
2. オブジェクト指向プログラミング:
3 つの主要な機能: 継承、ポリモーフィズム、カプセル化
インスタンス メソッド、インスタンス変数、クラス メソッド、クラス変数、プロパティ、初期化メソッド、プライベート変数、プライベートメソッド クラスクラスの
定義メソッド:
クラシッククラス(使用しないようにしてください):
class Name(): pass
オブジェクトはPythonのすべてのクラスの基本クラスです
新しいスタイルのクラスの定義メソッド:
class Name(object): defmethod(self): pass
初期化メソッド:
def __init__(self,name): self.nane = name
インスタンスメソッド:
def print_info(self): self.b = 200 print ‘test’,self.b
インスタンス化
test = Name(tom) print test.name
プライベートメソッドを定義します。形式: 2つのアンダースコアで始まり、アンダースコアで終わらないようにしてください
def __test2(self): pass
以下はその一部ですオブジェクト指向プログラミングに関する例、Python プログラミングと配布に関する一部の内容は演習の例で説明されます:
#!/usr/bin/env python class Cat(): #定义一个类,名字为Cat,一般类名第一个字要大写 def __init__(self,name,age,color): #初始化方法,self传递的是实例本身 self.name = name #绑定示例变量self.name self.age = age #绑定示例变量self.age self.color = color #绑定示例变量self.color #定义一个函数方法,实例化后可以进行调用使用 def eat(self): print self.name,"iseating......" def sleep(self): print "sleeping,pleasedon't call me" def push(self): print self.name,'is push threelaoshu' mery = Cat('mery',2,'white') #实例化,将类示例化,此时类中的self为mery tom = Cat('tom',4,'black') #实例化,将类示例化,此时类中的self为tom print tom.name #打印实例变量 tom.eat() #调用实例方法 def test(): #在外部定义一个test函数 print 'okok' tom.test = test tom.test()
上記のプログラムでは、Cat クラスが定義されており、その中で __init__() メソッドが最初にあります。これは、クラスをインスタンス化するときに、インタープリタが最初にこのメソッドを自動的に実行します。このメソッドは、通常、外部から渡されたパラメータを受け取り、インスタンス変数を定義するために使用されます。を呼び出すインスタンスメソッドとして使用されます
インスタンス化するときは、まずクラスをオブジェクトにインスタンス化し、その後クラス内のメソッドを呼び出すことができます。いわゆるインスタンスメソッドです。メソッドの戻り値に注意してください。これは後で使用できるようにするため、印刷には print ステートメントのみが使用されます。
結果は次のとおりです:
tom tom is eating...... okok
次の例では、プライベート メソッドとプライベート変数がクラスに導入されており、その使用法はクラス内の一般的な関数メソッドとは少し異なります。上記のプログラムでは、プライベート変数とプライベート メソッドを定義しています。その命名形式は二重アンダースコアで始まり、クラス外では呼び出されず、クラスに対してプライベートであることがプログラム内で確認できます。メソッド クラス内の他のメソッドによってメソッドを呼び出すことができるため、他のメソッドの操作を通じて有用な情報を渡すことができます
#!/usr/bin/env python class Tom(object): #定义一个新式类,object为python中所有类的基类 def __init__(self,name): self.name = name self.a = 100 self.b = None self.__c = 300 #这是一个类的私有实例变量,在外面不能被调用,可以在类内进行调用处理 def test1(self): print self.name self.b = 200 print 'test1',self.b def test2(self,age): self.age = age print 'test2',self.age self.__test3() #在这里调用类的私有方法 def __test3(self): #这是一个私有方法,也是不能被外界调用,可以在类中被别的方法调用,也可以传递出去 print self.a def print_c(self): print self.__c #调用类的私有变量 t = Tom('jerry') #实例化 t.test1() #调用实例方法 t.test2(21) def test4(num): print 'test4',num t.exam = test4 t.exam(225) t.print_c()
#!/usr/bin/env python class Dog(object): a = 100 def test(self): self.b = 200 print 'test' @classmethod #装饰器,在类中用classmethod来装饰的方法,将直接成为类方法,所传递的参数也将是类本身,一般都要有cls作为类参数 def test2(cls,name): print name cls.b = 300 #类变量值,下面调用时可以看出有何不同 print cls.a print 'test2' Dog.test2('tom') print Dog.b d = Dog() d.test2('tom') print d.b
在上面的程序中,我们可以看到,test方法为实例方法,test2方法为类方法,定义的区别主要就是类方法使用装饰器classmethod装饰的,并且类方法传递的参数为cls,即类本身,实例方法传递的参数是self,即实例本身,这就是区别,至于在最后的调用,明显可以看出,实例方法首先要实例化,再用实例去调用方法与变量;类方法则是直接通过类来进行调用。
结果如下:
tom 100 test2 300 tom 100 test2 300
下面主要是练习类里面的类方法和静态方法:
#!/usr/bin/env python class Dog(object): a = 100 def __init__(self,name): #初始化方法 self.n = name @classmethod def cls_m(cls): #类方法 print 'cls_m' @staticmethod def static_m(a,b): #静态方法 print a,b Dog.static_m(3,4) d = Dog(200) d.static_m(1,2)
在上面的程序中,主要是区别了类方法和静态方法;静态方法由staticmethod装饰器装饰,类方法由classmethod装饰器装饰;静态方法没有cls或self,可被实例和类调用
输出结果如下:
3 4 1 2
逻辑上类方法应当只被类调用,实例方法实例调用,静态方法两者都能调用。主要区别在于参数传递上的区别,实例方法悄悄传递的是self引用作为参数,而类方法悄悄传递的是cls引用作为参数。
下面主要练习和说明了在面向对象编程中,一些类中的属性
#!/usr/bin/env python #coding=utf-8 import datetime class Dog(object): #新式类的定义 def __init__(self,n): #初始化方法 self.n = n self.__a = None #私有变量 @property #装饰器,将方法作为属性使用 def open_f(self): #调用这个open_f属性将返回self_a和None比较的布尔值 return self.__a == None @open_f.setter #setter是重新定义属性,在这里定义的属性名字要和上面的保持一致 def open_f(self,value): self.__a = value d = Dog(22) print d.open_f d.open_f = 'ok' #重新定义属性 print d.open_f print "#######################" class Timef(object): def __init__(self): self.__time =datetime.datetime.now() #获取当前时间 @property def time(self): returnself.__time.strftime('%Y-%m-%d %H:%M:%S') #打印事件,格式是%Y-%m-%d %H:%M:%S @time.setter def time(self,value): self.__time =datetime.datetime.strptime(value,'%Y-%m-%d%H:%M:%S') #重新获取自定义的事件 t = Timef() print t.time #<当有@property装饰器时,作为属性直接使用> 区别于printt.time() #方法的调用和函数类似,方法就是讲函数绑定到实例化的实例上,属性是作为实例的属性直接进行调用的 t.time = '2016-06-17 00:00:00' print t.time print "######################" #这是一个练习的小程序,参考上面理解练习 class Hello(object): def __init__(self,num): self.mon = num self.rmb = 111 @property def money(self): print self.rmb return self.mon @money.setter def money(self,value): self.mon = value m = Hello(50) print m.money m.money = 25 print m.money
在上面的程序中,主要是解释了属性在类中的定义,以及属性与方法的一些区别,并且简单说明了如何重定义属性的内容,其实@proerty装饰的函数就相当于get属性来使用,@method.setter就是作为set进行重定义使用的。
方法就是讲函数绑定到实例化的实例上,属性是作为实例的属性直接进行调用的
输出结果如下:
True False ####################### 2016-06-27 20:39:38 2016-06-17 00:00:00 ###################### 111 50 111 25
下面是一个练习示例:
#!/usr/bin/env python class World(object): def __init__(self,name,nation): self.name = name self.nation = nation self.__money = 10000000000 def flag(self): print self.__money return self.name @property def action(self): return self.nation @action.setter def action(self,num): self.nation = num f = World('Asia','China') print f.flag() print f.action f.action = 'India' print f.action
输出结果如下:
10000000000 Asia China India
本文出自 “ptallrights” 博客,请务必保留此出处http://ptallrights.blog.51cto.com/11151122/1793483
以上がPython のオブジェクト指向と基本的な I/O 操作 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。