ホームページ  >  記事  >  バックエンド開発  >  詳しい解説ではPythonクラスの継承について詳しく解説しています

詳しい解説ではPythonクラスの継承について詳しく解説しています

迷茫
迷茫オリジナル
2017-03-25 17:50:181644ブラウズ

Python クラスの継承 (上級 5)

1. Python の継承とは

Python の継承とは:

  • 新しいクラスは最初から作成する必要はありません

  • 新しいクラスは既存のクラスから継承します既存のクラスのすべての関数を自動的に所有します

  • 新しいクラスは、既存のクラスに欠けている新しい関数を記述するだけで済みますクラスのすべての関数を持ちます

足りない新しい関数を記述するだけで済みます

  • 特徴継承の特徴:

  • サブクラスと親クラスは関係性があります

  • Pythonの継承の特徴:

合計 あるクラスから継承されます

  • super()を呼ぶことを忘れないでください。

    init

    2. Pythonでクラスを継承する
  • class Person(object):
        def init(self, name, gender):
            self.name = name
            self.gender = gender
    class Teacher(Person):
        def init(self, name, gender, course):
            super(Teacher, self).init(name, gender)
            self.course = course
    
    t = Teacher('Alice', 'Female', 'English')
    print t.name
    print t.course

    3. Pythonで型を決定する

  • 関数isinstance()で変数を決定できます型はPythonの組み込みデータ型(strなど)で使用できます、リスト、辞書、またはカスタム クラスでは、これらは本質的にデータ型です。
  • class Person(object):
        def init(self, name, gender):
            self.name = name
            self.gender = gender
    
    class Student(Person):
        def init(self, name, gender, score):
            super(Student, self).init(name, gender)
            self.score = score
    
    class Teacher(Person):
        def init(self, name, gender, course):
            super(Teacher, self).init(name, gender)
            self.course = course
    
    t = Teacher('Alice', 'Female', 'English')
    
    print isinstance(t, Person)
    print isinstance(t, Student)
    print isinstance(t, Teacher)
    print isinstance(t, object)

    4. Python のポリモーフィズム

    class Person(object):
        def init(self, name, gender):
            self.name = name
            self.gender = gender
        def whoAmI(self):
            return 'I am a Person, my name is %s' % self.name
    
    class Student(Person):
        def init(self, name, gender, score):
            super(Student, self).init(name, gender)
            self.score = score
        def whoAmI(self):
            return 'I am a Student, my name is %s' % self.name
    
    class Teacher(Person):
        def init(self, name, gender, course):
            super(Teacher, self).init(name, gender)
            self.course = course
        def whoAmI(self):
            return 'I am a Teacher, my name is %s' % self.name
            
            
    import json
    
    class Students(object):
        def read(self):
            return r'["Tim", "Bob", "Alice"]'
    
    s = Students()
    
    print json.load(s)
    5. Python の多重継承

  • Python では、1 つの親クラスからの継承に加えて、複数の親クラスからの継承が可能です。これを多重継承と呼びます。 Java では多重継承はできません
class A(object):
    def init(self, a):
        print 'init A...'
        self.a = a

class B(A):
    def init(self, a):
        super(B, self).init(a)
        print 'init B...'

class C(A):
    def init(self, a):
        super(C, self).init(a)
        print 'init C...'

class D(B, C):
    def init(self, a):
        super(D, self).init(a)
        print 'init D...'
        
        
class Person(object):
    pass

class Student(Person):
    pass

class Teacher(Person):
    pass

class SkillMixin(object):
    pass

class BasketballMixin(SkillMixin):
    def skill(self):
        return 'basketball'

class FootballMixin(SkillMixin):
    def skill(self):
        return 'football'

class BStudent(BasketballMixin):
    pass

class FTeacher(FootballMixin):
    pass

s = BStudent()
print s.skill()

t = FTeacher()
print t.skill()

6. Python でオブジェクト情報を取得する

isinstance() を使用して特定の型のインスタンスであるかどうかを判断する以外に、より多くの情報を取得する方法はありますか?

まず、type() 関数を使用して変数の型を取得します。これは Type オブジェクトを返します。

dir() 関数は変数のすべての属性を取得します。

dir() は文字列リストを返します。属性名がわかっている場合、オブジェクトの属性を取得または設定するには、getattr() 関数と setattr() 関数を使用する必要があります

class Person(object):
    def init(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def init(self, name, gender, score):
        super(Student, self).init(name, gender)
        self.score = score
    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name

print type(123) # <type &#39;int&#39;>

s = Student(&#39;Bob&#39;, &#39;Male&#39;, 88)
print s  # <class &#39;main.Student&#39;>

print dir(123) # [&#39;abs&#39;, &#39;add&#39;, &#39;and&#39;, &#39;class&#39;, &#39;cmp&#39;, &#39;coerce&#39;, &#39;delattr&#39;, &#39;p&#39;, &#39;pmod&#39;, &#39;doc&#39;, &#39;float&#39;, &#39;floorp&#39;, &#39;format&#39;, &#39;getattribute&#39;, &#39;getnewargs&#39;, &#39;hash&#39;, &#39;hex&#39;, &#39;index&#39;, &#39;init&#39;, &#39;int&#39;, &#39;invert&#39;, &#39;long&#39;, &#39;lshift&#39;, &#39;mod&#39;, &#39;mul&#39;, &#39;neg&#39;, &#39;new&#39;, &#39;nonzero&#39;, &#39;oct&#39;, &#39;or&#39;, &#39;pos&#39;, &#39;pow&#39;, &#39;radd&#39;, &#39;rand&#39;, &#39;rp&#39;, &#39;rpmod&#39;, &#39;reduce&#39;, &#39;reduce_ex&#39;, &#39;repr&#39;, &#39;rfloorp&#39;, &#39;rlshift&#39;, &#39;rmod&#39;, &#39;rmul&#39;, &#39;ror&#39;, &#39;rpow&#39;, &#39;rrshift&#39;, &#39;rshift&#39;, &#39;rsub&#39;, &#39;rtruep&#39;, &#39;rxor&#39;, &#39;setattr&#39;, &#39;sizeof&#39;, &#39;str&#39;, &#39;sub&#39;, &#39;subclasshook&#39;, &#39;truep&#39;, &#39;trunc&#39;, &#39;xor&#39;, &#39;bit_length&#39;, &#39;conjugate&#39;, &#39;denominator&#39;, &#39;imag&#39;, &#39;numerator&#39;, &#39;real&#39;]

print dir(s) # [&#39;class&#39;, &#39;delattr&#39;, &#39;dict&#39;, &#39;doc&#39;, &#39;format&#39;, &#39;getattribute&#39;, &#39;hash&#39;, &#39;init&#39;, &#39;module&#39;, &#39;new&#39;, &#39;reduce&#39;, &#39;reduce_ex&#39;, &#39;repr&#39;, &#39;setattr&#39;, &#39;sizeof&#39;, &#39;str&#39;, &#39;subclasshook&#39;, &#39;weakref&#39;, &#39;gender&#39;, &#39;name&#39;, &#39;score&#39;, &#39;whoAmI&#39;]

print getattr(s, &#39;name&#39;) # Bob
setattr(s, &#39;name&#39;, &#39;Adam&#39;) 
print s.name # Adam

class Person(object):

    def init(self, name, gender, **kw):
        self.name = name
        self.gender = gender
        for k, v in kw.iteritems():
            setattr(self, k, v)


p = Person(&#39;Bob&#39;, &#39;Male&#39;, age=18, course=&#39;Python&#39;)
print p.age # 18
print p.course #Python

以上が詳しい解説ではPythonクラスの継承について詳しく解説していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。