ホームページ > バックエンド開発 > Python チュートリアル > Python のオブジェクト指向と基本的な I/O 操作 (1)

Python のオブジェクト指向と基本的な I/O 操作 (1)

巴扎黑
リリース: 2017-04-01 13:33:39
オリジナル
1320 人が閲覧しました

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 = &#39;2016-06-17 00:00:00&#39;
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(&#39;Asia&#39;,&#39;China&#39;)
print f.flag()
 
print f.action
 
f.action = &#39;India&#39;
print f.action
ログイン後にコピー



输出结果如下:

10000000000
Asia
China
India
ログイン後にコピー



本文出自 “ptallrights” 博客,请务必保留此出处http://ptallrights.blog.51cto.com/11151122/1793483

以上がPython のオブジェクト指向と基本的な I/O 操作 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート