検索
ホームページバックエンド開発Python チュートリアルPython でのオブジェクト指向プログラミングに関する簡単な説明 (コード例)

Python でのオブジェクト指向プログラミングに関する簡単な説明 (コード例)

Oct 29, 2018 pm 05:36 PM
pythonオブジェクト指向プログラミング

この記事では、Python でのオブジェクト指向プログラミングについて簡単に説明します (コード例)。一定の参考値があるので、困っている友人は参考にしていただければ幸いです。

1. 最初のケース --- クラスを作成します

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''
class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")
    def eat(self):
        print('吃')

2. クラスを使用してオブジェクトをインスタンス化します

#__author:"吉"
#date: 2018/10/27 0027
#function:


# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()
print(peoson1.name,peoson1.age,peoson1.weight)
print(peoson1.eat())
print(peoson1.run())

# 原理
'''
变量是在栈区,对象是在堆区。

'''

3. オブジェクトのプロパティとメソッドへのアクセス

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()

# 访问属性
'''
变量是在栈区,对象是在堆区。

'''
print(peoson1.name,peoson1.age,peoson1.weight)
peoson1.name = 'jiji'
peoson1.age = 33
peoson1.weight = 90

print(peoson1.name,peoson1.age,peoson1.weight)

peoson1.changeName('lala')

print(peoson1.name,peoson1.age,peoson1.weight)

4. コンストラクター

#__author:"吉勇佳"
#date: 2018/10/27 0027
#function:

'''
构造函数:__init__() 是在创建类的时候自动调用,不写出这个
        构造函数的话,默认是一个空的构造函数什么页不执行。

'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

# 实例化对象
p1 = Peoson("jiyongjia",24,177,78)

print(p1.name,p1.age,p1.height,p1.weight)
p1.changeName('zhanglei')
print(p1.name,p1.age,p1.height,p1.weight)

# self 原理
'''
1、哪个对象调用,self就代表那个对象。 
'''

5. self.__class__() を使用してインスタンスとデストラクターを作成する

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Peoson("丽丽",33,53,222)
print(p1.name,p1.age,p1.height,p1.weight)
p1.createObj("狗熊")

'''
输出:丽丽 33 53 222
狗熊 24 89 56
我是析构函数
我是析构函数
'''
print(p1.name)

6. __str__() と __repr__() の比較

#
'''
重写
__str__()
    str方法是给用户用的,用于返回用户需要的结果信息、
__repr__()
   如果换成__repr__()是得到与str相同的结果。是在黑屏终端直接敲对象名再回车的方法
    注意:在没有str方法但是有repr的时候,repr 就相当于str,只是repr用于黑屏终端
'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)

    # 如果换成__repr__()是得到相同的结果。是在黑屏终端直接敲对象名再回车的方法
    def __str__(self):
        pass
        # return "这里是str"
        # return self.name
        #返回多个值的话用如下
        return "%s-%d-%d" % (self.name,self.age,self.weight)



# 如果要打印出所有的属性信息呢?
p1 = Peoson("嘉嘉",44,222,336)

# 不写def __str__()方法的时候,打印出的是该对象的地址信息
print(p1)
'''
输出:<__main__.peoson>
'''

# 写了__str__()函数是 打印出的自己需要返回的信息数据,此时p1等价于p1.__str__()
print(p1)</__main__.peoson>

7. オブジェクト指向の宿題の演習:

銃の設計の弾丸のデザインでは、一度に 1 発の弾丸が欠けています。弾丸がない場合は、撃てないというメッセージが表示されます。

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 枪设计子弹 设计一次少一个子弹,没子弹了提示无法射击

class Gun(object):
    def __init__(self,name,bulletNum):
        self.name = name
        self.bulletNum = bulletNum

    def shot(self):
        self.bulletNum =self.bulletNum - 1
        if self.bulletNum+1 != 0:
            print("此枪型号是:%s,此次射击成功!子弹减少1发,余量为:%d" %(self.name,self.bulletNum))
        else:
            print("*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************")
            self.bulletNum = 5

gun = Gun("AK47",5)
# 射击敌人
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()

'''
输出:
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4

'''

8. 外部からはアクセスまたは変更できないプライベート属性を作成する方法

#1 外部から変更できないプライベート属性を指定します。つまり、内部に 2 つのアンダースコアを追加します。 __money
#2 など、属性の前に付けます。 Python では、前に 2 つのアンダースコアが付いた特定のプロパティのみがプライベート プロパティと呼ばれますが、__money__ は特別プロパティとは呼ばれません。
#3 _money はプライベート属性ではありませんが、そのような変数を見た場合は、慣例によりプライベートとして扱う必要があります。それは本質的にプライベートではなく、アクセス可能です。

# 指定私有属性,在外部无法更改:即在属性前加两个下划线 如__money

class Person(object):
    def __init__(self,name,age,height,weight,money):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
        self.__money= money

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89,10000)
        print(p.name,p.age,p.weight,p.height,p.__money)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Person("丽丽",33,53,222,20000)

print(p1.name,p1.__money)    #此处出错,在外部无法访问私有

外部からアクセスしたい場合は、プライベート プロパティをメソッドに記述し、そのメソッドを呼び出してプライベート プロパティにアクセスします。例:

def run(self):
print("跑!")
print("工资",self.__money)

概要: プライベート属性にアクセスまたは変更する場合、変更とアクセスは 2 つの固定メソッドで実行でき、同時にメソッド内でデータをフィルタリングできます。

# 对于处理私有属性的方法---设置值的方法
    def SetMoney(self,money):
        if money<p># 実際、__money にアクセスできない理由は、Python がプライベート属性を _person__money に変更したためです。</p><p># つまり、__money にはまだアクセスできます。ただし、このような方法でアクセスするのではなく、ルールに従ってください。</p><pre class='brush:php;toolbar:false;'>p1._Person__money = 70    
print(p1.GetMoney())

上で述べたように、プライベート属性は引き続き変更できます。

rree

以上がPython でのオブジェクト指向プログラミングに関する簡単な説明 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonアレイで実行できる一般的な操作は何ですか?Pythonアレイで実行できる一般的な操作は何ですか?Apr 26, 2025 am 12:22 AM

PythonArraysSupportVariousoperations:1)SlicingExtractsSubsets、2)Appending/ExtendingAdddesements、3)inSertingSelementSatspecificpositions、4)remvingingDeletesements、5)sorting/verversingsorder、and6)listenionsionsionsionsionscreatenewlistsebasedexistin

一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?Apr 26, 2025 am 12:13 AM

numpyarraysAressertialentionsionceivationsefirication-efficientnumericalcomputations andDatamanipulation.theyarecrucialindatascience、mashineelearning、物理学、エンジニアリング、および促進可能性への適用性、scaledatiencyを効率的に、forexample、infinancialanalyyy

Pythonのリスト上の配列を使用するのはいつですか?Pythonのリスト上の配列を使用するのはいつですか?Apr 26, 2025 am 12:12 AM

UseanArray.ArrayOverAlistinPythonは、Performance-criticalCode.1)homogeneousdata:araysavememorywithpedelements.2)Performance-criticalcode:Araysofterbetterbetterfornumerumerumericaleperations.3)interf

すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?Apr 26, 2025 am 12:05 AM

いいえ、notallistoperationSaresuptedbyarrays、andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorintorintorinsertizizing、whosimpactsporformance.2)リスト

Pythonリストの要素にどのようにアクセスしますか?Pythonリストの要素にどのようにアクセスしますか?Apr 26, 2025 am 12:03 AM

toaccesselementsinapythonlist、useindexing、negativeindexing、slicing、oriteration.1)indexingstartsat0.2)negativeindexingAcsesess.3)slicingextractStions.4)reterationSuseSuseSuseSuseSeSeS forLoopseCheckLentlentlentlentlentlentlenttodExeror。

Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール