Python の 4 つのオブジェクト指向機能の詳細な例

WBOY
リリース: 2022-05-26 11:58:51
転載
2703 人が閲覧しました

この記事では、python に関する関連知識を紹介します, 主にオブジェクト指向に関する関連内容を紹介します. オブジェクト指向の 4 つの特徴には、抽象化、カプセル化、継承、ポリモーフィズムが含まれます。合わせて、皆さんのお役に立てれば幸いです。

Python の 4 つのオブジェクト指向機能の詳細な例

# 推奨学習:

Python ビデオ チュートリアル

##1. 概要 #抽象化とは、余分な詳細を隠す技術です。オブジェクト指向の概念では、抽象化の直接表現は通常クラスです。 Python は基本的にオブジェクト指向プログラミング言語のすべての要素を提供するため、少なくとも 1 つのオブジェクト指向言語をマスターしていれば、Python をオブジェクト指向プログラミングに使用するのは非常に簡単です。

トピック内の現在の目標に関係のないものは無視し、現在の目標に関連する側面に焦点を当てます (現実世界に存在するある種の物事を抽出し、それをプログラム コードで表現し、

抽象化は問題全体を理解することを意図したものではなく、問題の一部を選択し、当面は一部の詳細は使用しません。抽象化には 2 つの側面があります。 1 つはデータの抽象化で、もう 1 つはプロセスの抽象化です。

データの抽象化--> 世界の種類の物の特性、つまりオブジェクトの属性を表します。たとえば、鳥は次のような特性を持っています。翼、羽毛など (クラス属性)

プロセスの抽象化 -->世界を表現します。あるタイプの物の動作は、オブジェクトの動作です。たとえば、鳥は飛んだり鳴いたりします (クラスメソッド)

2. カプセル化

オブジェクト指向プログラミングでは、クラスは必要なすべてのデータ (クラスの属性とも言えます) をカプセル化します。クラス内のデータに対する操作 (クラスの動作とも言えます)。これらは、クラスのメンバー変数およびメソッド (またはメンバー関数) と呼ばれます。メンバー変数とメンバー関数をカプセル化するこのプログラミング機能は、カプセル化と呼ばれます。

2.1 パブリック メンバー変数とプライベート メンバー変数

Python では、メンバー変数の名前はパブリックかどうかを区別するために使用されます。メンバー変数またはプライベート メンバー変数。

Python では、2 つのアンダースコア「_ _」で始まる変数はプライベート メンバー変数であり、残りの変数はパブリック メンバー変数です。

このうち、プライベート メンバー変数はクラス内でのみアクセスできますが、共有パブリック メンバー変数はクラス外からアクセスできます。

2.2 パブリック メソッドとプライベート メソッド

クラスのメソッドは、クラスの動作をカプセル化したものです。

クラスのメソッドもパブリック メソッドとプライベート メソッドに分かれています。

クラスのプライベート メソッドには、オブジェクト名 (クラス内では self) を介してクラス内でのみアクセスできます。パブリック メソッドには、オブジェクト名を介してクラスの外部からアクセスできます。同様に、パブリック メンバー メソッドとプライベート メンバー メソッドも名前によって区別され、二重アンダースコア「__」で始まるメソッドがプライベート メンバー メソッドです。

プライベート メソッド: オブジェクトではなくクラス内でのみアクセスできます。

#プライベート属性: コードのセキュリティを向上させ、他の人が自由にコードを変更できないようにします

class Test(object):
    #私有方法
    def __test2(self):
        print("私有方法,__test2")
    #普通方法
    def test(self):
        print("普通方法test")
    #普通方法
    def _test1(self):
        print("普通方法_test1方法")
        #在类内部调用私有方法
        #t.__test2()
        self.__test2()
t = Test()
t.test()
t._test1()
#t.__test2() #调用时会报错
ログイン後にコピー

#プライベート メソッド アプリケーション シナリオ - テキスト メッセージの送信

#

#私有方法应用场景--发短信
class Test:
    #核心私有方法,用于发送短信
    def __sendMsg(self):
        print("---正在发送短信---")
    #公共方法
    def sendMsg(self,newMoney):
        if newMoney>10000: #余额大于10000才可以调用发短信功能
            self.__sendMsg()
        else:
            print("抱歉,余额不足,请先充值!")
t = Test()
t.sendMsg(1000000000)
ログイン後にコピー
#帐号不允许更改
class Person(object):
    def __init__(self,name,sex):
        self.__name = name
        self.__sex = sex
    def getSex(self):
        return self.__sex
    def getName(self):
        return self.__name
    def setName(self,newName):
        if len(newName)>=5:
            self.__name = newName
        else:
            print("名字长度必须大于等于才可修改!")
xiaoming = Person("hoongfu","男")
print(xiaoming.getName())
print(xiaoming.getSex())
xiaoming.setName("xiaoming")
print(xiaoming.getName())
ログイン後にコピー
2.2.1

演習

プライベート メソッドと共通メソッド、プライベート プロパティと共通プロパティを持つクラス Person を定義します。 プライベート メソッドは通常のメソッドを通じて呼び出すことができ、プライベート属性も通常のメソッドを通じて変更できます。
class Test(object):
    def test(self):
        self.__sex = "保密"
        print("普通公有方法test")
        #调用私有方法
        self.__test1()
    def __test1(self):
        print("私有方法__test1")
        #调用私有属性
        print("私有属性__sex:",self.__sex)
t = Test()
t.test()
ログイン後にコピー
3.

継承

3.1 継承の概念

プログラムでは、継承記述とは、物事の帰属関係です。たとえば、猫と犬は両方とも動物に属します。プログラムでは、猫と犬は動物から継承すると記述できます。同様に、ペルシャ猫とバリ猫は両方とも猫から継承しますが、シャー猫は両方とも動物から継承します。ペイとダルメシアンはすべて犬を継承します#継承

#继承
class Animal(object):
    def eat(self):
        print("----吃----")
    def dirk(self):
        print("----喝----")
    def run(self):
        print("----跑----")
    def sleep(self):
        print("----睡觉----")
class Dog(Animal):
    '''
    def eat(self):
        print("----吃----")
    def dirk(self):
        print("----喝----")
    def run(self):
        print("----跑----")
    def sleep(self):
        print("----睡觉----")
    '''
    def call(self):
        print("旺旺叫...")
class Cat(Animal):
    def catch(self):
        print("抓老鼠....")
dog = Dog()
dog.call()
dog.eat()
tom = Cat()
tom.catch()
tom.sleep()
ログイン後にコピー

#多重継承
#多继承
class Animal(object):
    def eat(self):
        print("----吃----")
    def dirk(self):
        print("----喝----")
    def run(self):
        print("----跑----")
    def sleep(self):
        print("----睡觉----")
class Dog(Animal):
    def call(self):
        print("旺旺叫...")
class XiaoTq(Dog):
    def fly(self):
        print("----飞喽-------")
xtq = XiaoTq()
xtq.fly()
xtq.call()
xtq.eat()
ログイン後にコピー
class Cat(object):
    def __init__(self,name,color="白色"):
        self.name = name
        self.color = color
    def run(self):
        print("%s -- 在跑"%self.name)
class Bosi(Cat):
    def setName(self,newName):
        self.name = newName
    def eat(self):
        print("%s -- 在吃"%self.name)
bs = Bosi("印度猫")
print(bs.name)
print(bs.color)
bs.eat()
bs.setName("波斯猫")
bs.run()
ログイン後にコピー

 3.2重写父类方法与调用父类方法

所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法.

使用super调用父类的方法:可以直接调用父类方法,不需要通过 父类名.父类方法名 的方式

class Cat(object):
    def sayHello(self,name):
        print("hello---1")
class Bosi(Cat):
    def sayHello(self):
        print("hello---2")
        #Cat.sayHello(self)
        super().sayHello("Zhangsan")
bs = Bosi()
bs.sayHello()
ログイン後にコピー

 3.3多继承

多继承举例:

class Base(object):
    def test(self):
        print("----Base-----")
class A(Base):
    def test(self):
        print("----test1-----")
class B(Base):
    def test(self):
        print("----test2-----")
class C(A,B):
    pass
c = C()
c.test()
print(C.__mro__) #可以查看C类的搜索方法时的先后顺序
ログイン後にコピー

4.多态

4.1多态的定义

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。

当子类和父类都存在相同的print_self()方法时,我们说,子类的print_self()覆盖了父类的print_self(),在代码运行的时候,总是会调用子类的print_self()。这样,我们就获得了继承的另一个好处: 多态。

class Dog(object):
    def printSelf(self):
        print("大家好,我是xxx,请大家多多关照!")
class XiaoTq(Dog):
    def printSelf(self):
        print("Hello,ereybody,我是你们的老大,我是哮天神犬!")

#定义一个执行函数
def exec(obj):

    """

    #定义时的类型并不知道要调用哪个类的方法,

    当运行时才能确定调用哪个类的方法,这种情况,我们就叫做多态

    """

    obj.printSelf()
dog = Dog()
exec(dog)
xtq = XiaoTq()
exec(xtq)
ログイン後にコピー

4.2新式类和经典类的区别

新式类都从 object 继承,经典类不需要

Python 2.x中默认都是经典类,只有显式继承了object

Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

#新式类和经典类的区别

class A:
    def __init__(self):
        print('a')
class B(A):
    def __init__(self):
        A().__init__()
        print('b')
b = B()
print(type(b))
ログイン後にコピー
class A():
    def __init__(self):
        pass
    def save(self):
        print("This is from A")
class B(A):
    def __init__(self):
        pass
class C(A):
    def __init__(self):
        pass
    def save(self):
        print("This is from C")
class D(B,C):
    def __init__(self):
        pass
fun = D()
fun.save()
ログイン後にコピー

推荐学习:python视频教程

以上がPython の 4 つのオブジェクト指向機能の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!