>  기사  >  백엔드 개발  >  Python 클래스의 상속에 대한 자세한 설명

Python 클래스의 상속에 대한 자세한 설명

迷茫
迷茫원래의
2017-03-25 17:50:181629검색

Python 클래스 상속(고급 5)

1. Python에서 상속이란 무엇입니까

Python에서 상속이란 무엇입니까:

  • 새 클래스 처음부터 작성할 필요가 없습니다

  • 새 클래스는 기존 클래스를 상속받아 자동으로 기존 클래스의 모든 기능을 갖습니다

  • 새로운 클래스만 기존 클래스에 없는 새로운 기능을 작성하면 됩니다 >

    기존 클래스의 모든 기능을 자동으로 소유

빠진 새로운 기능만 작성하면 됩니다
  • 상속된 기능:
  • 하위 클래스와 상위 클래스는 is 관계에 있습니다
  • 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() 함수는 변수의 유형을 결정할 수 있습니다. 이는 str, list 및 dict와 같은 Python의 내장 데이터 유형에서 사용할 수 있으며 사용자 정의 클래스에서도 사용할 수 있습니다. 기본적으로 데이터 유형입니다.

    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은 하나의 상위 클래스에서 상속하는 것 외에도 여러 상위 클래스에서 상속을 허용합니다. 다중 상속. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.