2019-08-09 개체 대상

7323 단어

1. 내장 클래스 속성

  • 내장 클래스 속성 성명 클래스가 무엇인지 시스템에서 자동으로 추가하는 속성
  • 현재 클래스의 객체 인쇄를 사용자정의하려면 다음과 같이 하십시오.
  • str를 다시 쓰는 방법, 이 방법의 반환값은 대응하는 인쇄 결과입니다(형식은 문자열이어야 함)
  • #!/user/bin/env python
    # -*- coding:utf-8 -*-
    
    
    class Person:
        num = 61
    
        def __init__(self, name, gender, age):
            self.name = name
            self.gender = gender
            self.age = age
    
        def eat(self, food):
            print('%s %s' % (self.name, food))
    
        def __str__(self):
            return ''
    
    
    p1 = Person(' ', ' ', '23')
    print(p1.__str__())
    

    2) Repr 방법을 다시 씁니다. 이 방법의 반환값은 대응하는 인쇄 결과입니다. (형식은 문자열이어야 합니다.)
    #!/user/bin/env python
    # -*- coding:utf-8 -*-
    
    
    class Person:
        num = 61
    
        def __init__(self, name, gender, age):
            self.name = name
            self.gender = gender
            self.age = age
    
        def eat(self, food):
            print('%s %s' % (self.name, food))
    
        def __repr__(self):
            return ''
    
    
    p1 = Person(' ', ' ', '24')
    print(p1.__repr__())
    

    주의: slots의 값을 설정하면 현재 클래스의 대상은dict 속성을 사용할 수 없습니다
  • __name__ 클래스의 필드;클래스.name__ - 클래스 이름 가져오기 (문자열)
  • print(Person.__name__)
    
  • __doc__ 클래스의 필드;클래스.doc__ - 클래스에 대한 설명서 가져오기
  • print(Person.__doc__)
    print(int.__doc__)
    
  • __class__ 객체 등록 정보,객체.class__ - 대상에 대응하는 클래스를 가져옵니다. 클래스 (type (대상) 기능과 같습니다.
  • print(p1.__class__)
    
  • __dict__ (대상을 사전으로 변환) 대상 속성;객체.dict__ - 대상의 모든 속성과 대응하는 값을 사전의 키 값 쌍 (대상이 대응하는 사전) 클래스의 필드로 변환하기;클래스.dict__ - 클래스를 하나의 사전으로 변환합니다. 사전의 요소는 클래스의 모든 필드와 대응하는 값입니다.
  • print(p1.__dict__)
    print(Person.__dict__)
    
  • __module__ 클래스의 필드;클래스.module__ - 현재 클래스가 어느 모듈에 표시되었는지 가져오기 (모듈의 이름을 되돌려줍니다)
  • print(Person.__module__)
    print(bool.__module__)
    
  • _\bases__ 클래스의 필드;클래스.\bases__ - 현재 클래스의 부류 가져오기 (원조로 되돌아오는 것)
  • print(Person.__bases__)
    

    연습:사전을 객체로 변환
    with open('data', 'r', encoding='utf-8') as f:
        content = json.loads(f.read())
        datas = content['data']
    
    
    class Data:
        def __init__(self, dict1: dict):
            for key in dict1:
                setattr(self, key, dict1[key])
    
        def __repr__(self):
            return ''
    
    
    for item in datas:
        data = Data(item)
        print(data.name, type(data))
        print(data)
    

    2. 사유화

  • 접근 권한: 공개, 보호, 사유 공개-공개의 속성과 방법은 클래스의 내부, 외부에서 사용할 수 있고 계승 보호-보호의 속성과 방법은 클래스의 내부에서 사용할 수 있고 외부에서 사용할 수 없으며 계승될 수 있다. 사유-사유의 속성과 방법은 클래스의 내부에서만 사용할 수 있고 외부에서만 사용할 수 있으며 계승될 수 없다
  • python의 속성과 방법에 대한 접근 권한python 클래스의 모든 속성과 방법의 본질은 공개됩니다.사유화는 가짜 사유화이다. 단지 프로그래머에게 이 속성이나 방법을 외부에서 사용할 수 없다는 것을 알릴 뿐, 어떻게 사유화를 계승하는지도 알려주지 않는다. 사유화가 필요한 속성명이나 방법명 앞에 ''을 붙인다.(참고: ''로 끝나면 안 됩니다!)python의 사유화 원리: 사유의 속성과 방법 앞에 '클래스 이름'
  • 3. 속성의 Getter와setter

  • Getter와setter가 무엇인지 속성 값을 얻기 전에 다른 일을 하려면 이 속성에 Getter를 추가해야 한다.속성에 값을 부여하기 전에 다른 일을 하려면 이 속성에 setter
  • 를 추가해야 합니다.
  • 속성에 Getter 추가
  • 속성 이름 지정 시 앞에 '' 추가
  • @property 장식기 뒤에 대상 방법을 설명합니다. a. 속성을 밑줄을 빼서 방법명 b로 합니다. 방법은self를 제외한 다른 인자가 필요하지 않습니다. c. 함수의 반환값은 이 속성을 얻을 때 얻는 값입니다
  • 외부에서 속성을 사용할 때'대상'을 통과한다.미끄러지지 않는 속성 '사용 주의: 속성 값을 가져올 때 Getter에 대응하는 함수를 자동으로 호출합니다
  • 속성에 setter 속성을 추가하기 전에 getter 1을 추가해야 함) 속성 이름 앞에 ''가 있음을 보증합니다2) @Getter 이름.setter 뒤에 대상을 설명하는 방법 a. 속성을 밑줄을 빼서 방법명 b로 한다. self 이외의 매개 변수가 필요하다. c. 반환값이 필요하지 않다
  • 외부에서 속성을 사용할 때'대상'을 통과한다.미끄러지지 않는 속성 '사용 주의: 속성에 값을 부여할 때 실질은setter에 대응하는 방법
  • 을 호출합니다
    class WriteError:
        def __str__(self):
            return WriteError
    
    class Rect:
        def __init__(self, length, width):
            if isinstance(length, int) or isinstance(length, float):
                self._length = length
            else:
                raise ValueError
            self._width = width
            self._perimeter = None
            self._area = None
    
        @property
        def length(self):
            return self._length
    
        @length.setter
        def length(self, value):
            if not isinstance(value, int) or isinstance(value, float):
                raise ValueError
            if value < 0:
                raise ValueError
            self._length = value
    
        @property
        def width(self):
            return self._width
    
        @width.setter
        def width(self, value):
            if not isinstance(value, int) or isinstance(value, float):
                raise ValueError
            if value < 0:
                raise ValueError
            self._width = value
    
        @property
        def perimeter(self):
            self._perimeter = (self.length+self.width)*2
            return self._perimeter
    
        @perimeter.setter
        def perimeter(self, value):
            raise WriteError
    
        @property
        def area(self):
            self._area = self.length*self.width
            return self._area
    
        @area.setter
        def area(self, value):
            raise WriteError
    
    
    p1 = Rect(10, 50)
    print(p1.length, p1.width, p1.perimeter, p1.area)
    
    p1.length = 20
    print(p1.length, p1.width, p1.perimeter, p1.area)
    

    4. 유형 방법과 정적 방법

  • 클래스 중의 함수 클래스 중의 방법은 대상 방법, 클래스 방법과 정적 방법
  • 으로 나뉜다.
    1) 대상 방법 a. 어떻게 성명하는가: 직접 성명 b. 어떻게 호출하는가: 대상으로 호출하는가 c. 특징: 현재 대상을 가리키는selfd가 있다. 언제 사용하는가: 함수를 실현하는 기능이 대상 속성을 필요로 한다면 대상 방법을 사용한다.
    2) 클래스 방법 a. 어떻게 설명합니까: @classmethod 뒤에 설명합니다 b. 어떻게 호출합니까: 클래스로 호출합니다. '클래스.클래스 방법()'c. 특징: 자체적인 매개 변수cls가 있어 현재 클래스를 나타낸다.이 매개 변수는 호출할 때 참조를 하지 않아도 현재 클래스를 자동으로 전달합니다.cls: 호출하는 사람이 누구를 가리키는지(대상이 가리키는 것이 대상이 대응하는 클래스를 가리키는 경우) d. 언제 사용합니까? 함수의 기능을 실현하려면 대상 속성이 필요하지 않지만 클래스의 필드가 필요하면 클래스 방법을 사용합니다
    3) 정적 방법 a. 어떻게 설명합니까: @staticmethod 뒤에 설명합니다 b. 어떻게 호출합니까: 클래스를 통해 호출합니다. '클래스.정적 방법 () 'c. 특징: 기본 매개 변수 d가 없습니다. 언제 사용합니까: 함수를 실현하는 기능은 클래스도 필요 없고 대상도 필요 없습니다. 정적 방법을 사용합니다

    상속

  • 상속이 무엇인지는 자류가 부류의 속성과 방법을 직접 가지도록 하는 것이다. 자류-상속자 부류/초류-피상속자
  • 문법class클래스명(부류1, 부류2,.....):설명서 클래스의 내용
  • 2)설명: ()-고정 쓰기, (object)성명류에 해당하는 것을 생략할 때 부류를 쓰지 않으면 기본 계승object(object는 기본 클래스라고도 부른다) 부류 - 한 클래스의 부류는 여러 개가 있을 수 있지만 일반적인 경우 하나(다중 계승 지원)만 있습니다
    class Person:
        num = 61
    
        def __init__(self):
            print('Person init')
            self.name = ' '
            self.age = 18
            self.gender = ' '
            self.__a = 10
    
        def eat(self, food=' '):
            print('{} {}'.format(self.name, food))
    
        @classmethod
        def show(cls):
            print(' :%d' % cls.num)
    
        @staticmethod
        def func1():
            print(' ')
    
        def func2(self):
            print(' '+self.name)
    
    
    class Student(Person):
        num = 10
    
        def __init__(self):
            #  , super() __init__ 
            super().__init__()
            print('Student init')
            self.study_id = '001'
            self.class1 = 'py1904'
    
        #  
        def study(self):
            print(self.name+' !')
    
        @staticmethod
        def func1():
            print(' ')
    
        def func2(self):
            print(' !')
            #  super() 
            #  : super() 
            super().func2()
    
    
    stu1 = Student()
    print(Student.num)
    print(stu1.name, stu1.age, stu1.gender)
    stu1.eat()
    Student.show()
    print(stu1.__dict__)
    Student.func1()
    
    stu1.func2()
    

    좋은 웹페이지 즐겨찾기