#### Pythonのオブジェクト指向の###

オブジェクト指向およびプロセス指向の## ##

プロセス中心のプログラミングのアイデアです:プロセス(手順指向)の顔。プログラムの主な目的が行われていると、それは問題を解決して、これらの手順を実装するための関数を使用し、ステップバイステップで、一つ一つの単一の呼び出しを使用してするために必要なステップを分析することです。
1.すべてのステップは徐々に一定の需要を最初から最後まで完成されている
別々のコードと機能のパッケージに開発要件、特定の機能を従っ
3.最後に終了コード異なる順序で関数を呼び出すことです
機能:
手順やプロセス1.焦点は、責任分担に焦点を当てていない
複雑なコードの需要が非常に複雑になる場合2.
3.複雑なプロジェクトを開発し、発展することは非常に困難であり、決まったルーチンが存在しない、
短いOOP:オブジェクト指向(オブジェクト指向プログラミング) 、設計プログラムは、オブジェクトの基本単位としてのプログラムは、オブジェクトは、関数データと動作データを含みます。

比較関数、オブジェクト指向のオブジェクトに従った方法の複数の機能に包装大きいパッケージであり、
最初に決定デューティの要求が完了する前に1 - (メソッド)を実行する
。2.責任の下で異なるオブジェクトを決定しますオブジェクトの異なるカプセル化方法(複数)の内部に
コードの3ファイナライズ、それはさまざまな方法で呼び出す別のオブジェクトの順序になるように
機能:
目的及び責任1.焦点は、異なるオブジェクトが異なる責任仮定
2.より適切に需要の複雑な変更は、特別に固定ルーチン提供し、複雑なプロジェクトに対処するために開発された
プロセス指向の基礎3.必要性を、その後、いくつかのオブジェクト指向構文を学びます

オブジェクト指向の概念は、2つのコアがある
クラスを:同じ特性や挙動持つもののクラスの総称であり、
クラスの外に作成された具体的な存在:オブジェクトを
関係やクラスオブジェクト:ファースト・クラスとそのオブジェクトのいる
クラスは、テンプレートオブジェクトでありますこれは、外に作成したテンプレートに基づいている
だけで、オブジェクトが複数持つことができます持っているクラス

クラス:属性(共通情報などの事項)やメソッド(アクションを完了することができます)
1.クラス名:これらの事(大きなこぶの命名法)の名前
:大きなこぶの命名法
の各単語の最初の文字1資本金は
単語と単語が2下線が引かれていない間の
2属性をこのクラスには、どのような特性からオブジェクトを作成します
。3.方法:このクラスは、どのような行動からオブジェクトを作成し、
オブジェクトの定義のための### ###
果物を作成します
プロパティ:名前の
メソッド:色、味

class frutes():
    def sweet(self):  ##一个
        print('%s味道很甜')
    def colour(self):
        print('颜色是红色')
print(frutes())  #调用函数,显示内存地址
#创建一个对象
apple = frutes()
print(apple) #调用函数,显示内存地址
frutes.name = 'Apple'
print(frutes.name)
apple.colour()
apple.sweet()

banana = frutes()
print(banana)
banana.sweet()
banana.colour()

クラス定義のメソッドを作成したときに、自己引数

機能オブジェクトへの自己参照であるオブジェクトと呼ばれる方法、パッケージ内部の処理は、オブジェクト自体は、それが呼び出しパラメータの最初のパラメータによって定義される通過自己(時点で必要ないときに現在の自己メソッドを呼び出すことを意味します)自己なければなりません

class Cat:
    def __init__(self,name,color):
        self.name = name
        self.color = color
    def get_name(self):
        print('name is %s' %self.name)
    def get_color(self):
        print('color is %s' %self.color)

tom = Cat('Tom','blue')
erpang = Cat('pang','yellow')   # 实例化两个对象
#两个对象是使用同一个类创建出来的,但是其数据不一致,相互之间没有关系

tom.get_color()  # 当对象调用方法的时候,其中self参数就是调用方法的对象本身
tom.get_name()

erpang.get_color()# 当对象调用方法的时候,其中self参数就是调用方法的对象本身
erpang.get_name()

输出结果:
color is blue
name is Tom  
 #当调用方法的对象是tom的时候,self参数就是引用的该对象,输出都是实例化该对象的时候,设置的属性

color is yellow
name is pang
 #当调用方法的对象是erpang的时候,self参数就是引用的该对象,输出都是实例化该对象的时候,设置的属性

__ ### ###初期化メソッド__init
この初期化メソッドを組み込みメソッド、プロパティとメソッドは、内容に応じて、クラスを定義するために設計されている
あなたは、時間のインスタンスを作成することができるようにクラスは、テンプレートとしての役割を果たすことができるので、いくつかは、私たちが埋めるために必須属性をバインドする必要があります信じています。インスタンスを作成する際に、特別な__init__メソッドを定義することにより、名前を入れて、スコアとに接続他の特性
最初のパラメータの方法を__init__通知が常に自己である、それは_で、従って、それ自体のインスタンスを作成表します内部_init__方法、あなたは自分が自身のインスタンスを指すように作成されるため、自己にバインドされたプロパティのすべての種類を置くことができます。
インスタンスを作成するときに__init__メソッドでは、空のパラメータを渡すと、パラメータを渡すことはできません__init__メソッドと一致している必要がありますが、自己を渡す必要はありません、Pythonは自らをインタプリタインスタンス変数に渡します。 。

使用:クラス名()オブジェクトを作成する際に、Pythonインタプリタが自動的に次の操作を実行する、オブジェクトを作成することができる:1メモリ内のオブジェクトのためにスペースを割り振る - オブジェクトを作成する; 2は、初期化メソッド属性がオブジェクトに設定されているコール。初期値。

あなたは、オブジェクトのプロパティを設定するオブジェクトを作成するとき。デフォルトの初期化メソッドを使用すると、一連の属性。

1.把希望设置的属性值,定义成__init__方法的参数
2.在方法内部使用self.属性名 = 形参 接收外部传递的参数
3.在创建对象的时候,使用类名(属性)调用
class frutes():
    def __init__(self, new_name):   ##初始化方法
       self.name = new_name
    def sweet(self):
        print('%s味道很甜' %(self.name))
    def colour(self):
        print('%s颜色是红色' %(self.name))
       #print(frutes())  #调用函数,显示内存地址
#创建一个对象
apple = frutes('Apple')
print(apple) #调用函数,显示内存地址
apple.colour()
apple.sweet()

banana = frutes('Banana')
print(banana)
banana.sweet()
banana.colour()

strの方法は、### ####
、印刷出力ターゲット変数を使用したい、カスタマイズされたコンテンツを印刷する機能は__str__の組み込みメソッドを利用することができます。しかし、出力の内容は、文字列タイプにすることができます。

オブジェクト変数は、デフォルトでは可変出力が参照されるオブジェクトは、クラスとメモリ内のどのアドレスで作成されたオブジェクトである場合に、印刷出力を使用します

デフォルトの出力:

class frutes():
    def __init__(self, new_name):
       self.name = new_name
    def __str__(self): #返回的必须是一个字符串
        return '我是%s' %(self.name)
    def sweet(self):
        print('%s味道很甜' %(self.name))
    def colour(self):
        print('%s颜色是红色' %(self.name))
       #print(frutes())  #调用函数,显示内存地址
#创建一个对象
apple = frutes('Apple')
print(apple) #调用函数,显示内存地址
apple.colour()
apple.sweet()

banana = frutes('Banana')
print(banana)
banana.sweet()
banana.colour()


##進の変更

class frutes():
    def __init__(self, new_name):
       self.name = new_name
    #def __str__(self): #返回的必须是一个字符串
    #    return '我是%s' %(self.name)
    def sweet(self):
        print('%s味道很甜' %(self.name))
    def colour(self):
        print('%s颜色是红色' %(self.name))
       #print(frutes())  #调用函数,显示内存地址
#创建一个对象
apple = frutes('Apple')
print(apple) #调用函数,显示内存地址
apple.colour()
apple.sweet()
addr = id(apple)

banana = frutes('Banana')
print(banana)
banana.sweet()
banana.colour()
addr = id(banana)  #输出内存地址
print('%x' %(addr))  #转化成十六进制
print('%d' %(addr))  #转换成10进制的方法

##デル・###
クラスは__del__メソッドを定義している場合は、(このオブジェクトはメモリアウトから削除された)、それが削除されたときにオブジェクトをインスタンス化するために、このクラスを使用する場合、それは自動的にメソッドを呼び出します。

class frutes():
    def __init__(self, new_name):
       self.name = new_name
    def __del__(self): #返回的必须是一个字符串
        return '我是%s' %(self.name)
    def sweet(self):
        print('%s味道很甜' %(self.name))
    def colour(self):
        print('%s颜色是红色' %(self.name))
       #print(frutes())  #调用函数,显示内存地址
#创建一个对象
apple = frutes('Apple')
print(apple.name) #调用函数,显示内存地
del apple  ##删除

print("*" * 50)
print(apple.name)

運動:
第一の抽出数スタック、最初の最終値にスタック(最後のアウト)、そこ

class Stack:   #创建一个类
    def __init__(self):  #初始化一个列表
        self.stack = []
    def push(self,value):  #往栈里输入值
        self.stack.append(value)
        return True
    def pop(self):   ##判断栈里是否存在值 
        if self.stack:
            item = self.stack.pop()  #定义一个变量接受pop弹出的值
            return item
        else:
            return False 
    def top(self):
        if self.stack:
            return self.stack[-1]  #取出栈里的第一个值
        else:
            return False
    def length(self):   #栈的长度
        return len(self.stack)
    def view(self):   
        return ','.join(self.stack)  #用,连接栈内的值
s= Stack() 调用函数
s.push('1')
s.push('2')
s.push('3')
item = s.pop()  #弹出值
print(s.view())

取出队列的第一个数
class Stack:
    def __init__(self):
        self.stack = []
    def push(self,value):
        self.stack.append(value)
        return True
    def pop(self):
        if self.stack:
            item = self.stack.pop(0)
            return item
        else:
            return False
    def top(self):
        if self.stack:
            return self.stack[0]
        else:
            return False
    def length(self):
        return len(self.stack)
    def view(self):
        return ','.join(self.stack)
s= Stack()
s.push('1')
s.push('2')
s.push('3')
item = s.pop()
print(s.view())

練習

class Person:
    def __init__(self,name,weight):
         self.name = name
         self.weight = weight
    def __str__(self):
        return '%s的体重是%.2f' %(self.name,self.weight)
    #在对象的方法内部,可以直接访问对象的属性
    def run(self):
        print('%s跑步' %(self.name))
        self.weight -= 0.5
    def eat(self):
        print('%s吃饭' %(self.name))
        self.weight += 1
xiaoming = Person('小明',75)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
xiaomei = Person('小美',45)
xiaomei.eat()
xiaomei.run()
print(xiaomei)

図1に示すように、新しいクラスとレガシー(従来の)クラス
新しいカテゴリ:ベースオブジェクトクラスクラス
クラシック:クラス・オブジェクトは基本クラスでありません

python3.Xがクラスで定義されたときに親クラスが指定されていない場合、デフォルトでは、基本クラスのオブジェクト-python3.x新しいクラスが定義されているとして使用されます

python2.xは、クラスを定義するときは、親クラスがに、基本クラスのオブジェクトでない場合

クラスを定義するときに親を持たない、オブジェクトからの提案統一継承場合のコードは、将来的には、python2.xとpython3.x実行で同時に書き込むことができるようにするには
2、クラス属性とクラスメソッド

クラスのプロパティ:クラス自体に定義されたプロパティ、代入文の使用はすべて、このような性質自体を分類し、classキーワードクラスの属性を定義することができます。クラス名を使用してください。プロパティと呼ばれるクラスの属性

すべての分類が、クラスのすべてのインスタンスがアクセス権を持っており、このプロパティのインスタンスがないとき、それは財産のこのクラスを探し続けますが、私たちは、クラス属性を定義する場合

3、私有財産およびプライベートメソッド

プライベートプロパティ:二つの変数を持つフロントは民営化を強調し、プロパティは、クラスの内部に属する後の財産の民営化は、アクセスまたは変更することはできませんだけではなく、内部的にアクセスすることができます。

プライベートメソッド:2は、民営化法を下線で前のメソッド名は、あなたが外側に民営化のメソッドを呼び出すためにインスタンスを使用することはできません、内部的に呼び出すことができます。

メソッドが定義され
、プロパティまたはメソッドの定義に2つの下線を追加し、プロパティ名又はメソッド名の前のプライベートプロパティまたはメソッドの定義である
4、静的メソッド

あなたはクラスのメソッドを定義する必要がある場合、このメソッドは、インスタンスプロパティはインスタンスメソッドを呼び出す必要はありません必要はありませんが、どちらもプロパティがアクセスクラスのクラスメソッド、このメソッドは静的メソッドとしてパッケージ化することができるこの時間を呼び出す必要はありません。キーワードセットを使用し@staticmethod

5、デザインパターン-シングルトン
デザインパターン:

デザインパターンは、それを確実にするために、一般的に、人々は、広範なデザインパターンは、特定の問題に対する解決策、再利用可能なコードにデザインパターンを使用することが実証されている、他の人を理解するために、コードをより簡単に、前作と精錬の要約であります信頼コード
シングルトンデザインパターン:

目的:システム・メモリ・アドレスのクラス名()によって返された各実行オブジェクトのインスタンスが1つだけ存在し、同じされている、クラスはオブジェクトを作成してみましょうするには

シングルトンデザインパターンの__(CLS)に実装される方法を__new使用します。

私たちは、クラス名を持つオブジェクトを作成します。方法時間、Pythonインタプリタは、2つのことを行うために私たちを助ける、
オブジェクトに割り当てられた1スペース

__new__是一个由object基类提供的内置的静态方法,主要有两个作用: 在内存中为对象分配空间 返回对象的引用
new:负责给对象分配空间,并返回对象的引用给初始化方法

2.オブジェクトの初期化

__init__(初始化方法)负责给对象初始化.
解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法

おすすめ

転載: blog.csdn.net/weixin_44821839/article/details/91874379