2018-09-07-day15

9677 단어

1. 내장 클래스 속성


내장류 속성은 바로 마법 속성 마법 속성이다. 속성명의 앞뒤에 두 개의 밑줄 마법 방법이 있다. 방법의 앞뒤에 두 개의 밑줄 종류의 속성이 있다.name: 클래스 이름을 저장했는데 결과는 문자열 2.doc: 클래스에 대한 설명 문서 가져오기 3.dict (): 대상과 클래스의 속성 및 대응하는 값을 키 값으로 변환하여 한 사전에 저장합니다.class (): 클래스를 가져오는 형식 5.module: 클래스가 있는 모듈의 이름 가져오기 6.bases: 현재 클래스의 부모 클래스 대상의 속성을 가져옵니다: 1.class: 대상을 가져올 때 어떤 클래스에 속하는지 (반환값은 클래스입니다) myclass =p1.class #my_class는 클래스입니다. 이전 클래스가 할 수 있는 일은 모두 p2=myclass(소명,20180)print(p2.name)2.dict: 대상과 클래스의 속성 및 대응하는 값을 키 값으로 변환하여 사전에 저장
import datetime
class Person:
    '''
     
    '''
    # 
    number = 61
    def __init__(self,name,age,height):
        # 
        self.name = name
        self.age = age
        self.height = height
    # 
    def run(self):
        print('%s '%self.name)
    # 
    @classmethod
    def show_number(cls):
        print(' %d '%cls.number)
    # 
    @staticmethod
    def destroy_env():
        print(' ')
if __name__=='__main__':
    pass
    p1 =Person(' ',28,107)
    print(Person.__name__)      # 
    print(type(Person.__name__))#
    print(type(Person))         #     
    # print(p1.__name__)            #AttributeError
    print(Person.__doc__)       # 
    print(datetime.datetime.__doc__)
    my_class =p1.__class__
    p2 = my_class(' ',20,180)
    print(p2.name)
    print(Person.__dict__)
    print(p2.__dict__)      #{'name': ' ', 'age': 20, 'height': 180}
    print(Person.__bases__)
    print(Person.__module__)

2.slots 마법:

 __slots__ , , !
 __slots__ , __dict__ 
    __slots__=('name','age','face')
class Person:
    __slots__=('name','age','face')
    def __init__(self):
        self.name=' '
        self.age=18
        self.face=70
if __name__=='__main__':
    p1 = Person()
    print(p1.__dict__)
    print(p1.name)
    p1.sex = 'girl' #__slots__ sex
    print(p1.sex)

3. 사유화


python에는 진정한 사유화가 없습니다. 클래스의 속성과 방법은 속성 이름과 방법 이름 앞에 두 개의 밑줄을 쳐서 속성과 방법을 사유화할 수 있습니다.b. 사유의 속성과 방법은 현재 클래스에서만 사용할 수 있고 클래스 밖에서 직접 사용할 수 없는 속성 사유화의 원리 사유화의 원리는 두 개의 밑줄이 있는 속성명과 방법명 앞에 '클래스 이름은 외부에서 속성 이름에 직접 접근해서 속성을 사용하는 것을 막습니다
class Dog:
    __number = 100
    def __init__(self):
        self.__color = ' '
        self.age = 3
        self.name = ' '
    def eat(self):
        print('%s ~'%self.name)
    @classmethod
    def shout(cls):
        print(' ...')
    @staticmethod
    def function():
        print(' ')
    @classmethod
    def get_number(cls):
        print(cls.__number)
    @classmethod
    def set_number(cls,number):
        cls.__number=number
if __name__=='__main__':
    Dog.get_number()
    Dog.set_number(200)
    Dog.get_number()
    dog = Dog()
    print(dog.__dict__)
    print(dog._Dog__color)
    print(Dog.__number)

4. 속성의 Getter 및 setter


1. 보호 유형의 속성: a. 대상의 속성을 성명할 때 속성 이름 앞에 밑줄을 쳐서 이 속성을 대표할 때 보호되는 속성이다.그러면 앞으로 이 속성에 접근할 때 직접 접근하지 마십시오. Getter를 통해 속성의 값과setter를 가져와서 이 속성에 b를 부여해야 합니다. 만약 하나의 속성이 보호 형식의 속성으로 명시되어 있다면, 우리는 이 속성에 Getter를 추가해야 합니다. setter를 추가할 수도 있습니다.Getter를 추가하고 Getter를 추가하는 것은 매개 변수가 없고 되돌아오는 값이 있는 함수 a. 형식: @property def 보호된 속성 이름에 밑줄이 없음(self): 코드 블록을 처리하여 속성과 관련된 값을 사용 방식 대상으로 되돌려줍니다.밑줄 없는 속성명 b. 장면 장면 1을 사용합니다: 대상의 어떤 속성의 값을 얻기 전에 다른 일을 하고 싶습니다.이 속성에 Getter 장면2를 추가할 수 있습니다. 어떤 속성이 사용될 때입니다.setter를 추가하고 setter를 추가하는 것은 매개 변수가 있지만 되돌아오는 값이 없는 함수를 설명하는 것입니다.작용은 속성 값 부여 주의: 속성에 setter를 추가하려면 이 속성에 Getter a. 형식 @ 속성 이름을 추가해야 합니다.setter def 속성 이름(self, 매개 변수): 코드 블록 처리 self.속성 이름 = 매개 변수 b. 호출 방식 대상.속성 이름 = 매개변수
class Car:
    def __init__(self):
        self.color = ' '
        self.type = ' '
        self._price = 2000
# _price getter
    @property
    def price(self):
        if self._price<1000:
            return self._price
        else:
            return str(self._price//1000)+'k'
    # _price setter
    # setter 
    @price.setter
    def price(self,price):
        if isinstance(price,int) or isinstance(price,float):
            self._price = price
        else:
            self._price = 0
if __name__=='__main__':
    # getter getter 
    #price _price getter
    c1 = Car()
    print(c1.price)# getter 
    c1.price = 'x' # setter 
    print(c1.price)

연습: 직원 클래스를 설명하는데 그 중 하나는 기혼 여부입니다.저장된 것은 bool입니다. 값을 얻기 전에 저장된 값에 따라'기혼'또는'미혼'으로 되돌아갑니다.
class Staff:
    def __init__(self):
        self.name = ''
        self.age = ''
        self._marriage=False
    @property
    def marriage(self):
        if self._marriage:
            return ' '
        else:
            return ' '
    @marriage.setter
    def marriage(self,marriage):
        if marriage == ' ':
            self._marriage=True
        elif marriage == ' ':
            self._marriage=False
if __name__ == '__main__':
    s1 = Staff()
    s1.name = ' '
    s1.age = 20
    s1.marriage = ' '
    s2 = Staff()
    s2.name = ' '
    s2.age =18
    s2.marriage=' '
    print(s1._marriage,s1.marriage)
    print(s2._marriage,s2.marriage)

5. 클래스 상속(**)


python의 클래스는 계승할 수 있고 다중 계승 프로그램의 계승을 지원한다. 바로 하위 클래스가 부모 클래스의 속성과 방법을 직접 가지도록 하는 것이다. (계승 후 부모 클래스의 내용은 계승되어 감소하지 않는다)계승된 문법class 클래스 이름 (부모 클래스): 클래스의 이름 주의: 클래스를 성명할 때 계승을 쓰지 않으면, 이 클래스는python의 기본 클래스object를 자동으로 계승합니다:class 클래스 이름 (object) 에 해당합니다:python의 모든 클래스는 직접 또는 간접적인 기초가object2.어떤 것을 계승할 수 있는지 모든 속성과 방법은 주의를 계승할 수 있다. slots의 설정은 계승되지 않지만 부류가 slots를 설정하면 현재 클래스의 부류 대상의dict 속성은 부류가 계승한 속성을 얻을 수 없다. 주의:python의 개인적인 속성은 사실 계승된 것이다.
class Person(object):
    ''' '''
    # 
    __slots__=('name','age')
    number = 61
    # 
    def __init__(self,name=' ',age=18):
        self.name=name
        self.age=age
    # 
    def show_message(self):
        print(' :%s, :%s'%(self.name,self.age))
    @classmethod
    def show_number(cls):
        print(' %d '%cls.number)
    @staticmethod
    def complaint():
        print(' ')
class Student(Person):
    pass
if __name__ == '__main__':
    print(Student.number)
    s1 = Student()
    print(s1.name)
    s1.show_message()
    Student.show_number()
    Student.complaint()
    print(s1.__dict__)

6. 메소드의 재작성:


자류는 부류를 계승하고 부류의 속성과 방법을 가진 후에 자신의 속성과 방법을 추가할 수 있다.추가 방법과 클래스의 필드는 하위 클래스에서 추가할 방법과 필드를 직접 설명하면 됩니다. 2.대상 속성 대상의 속성을 추가하는 것은 부류의 init 방법을 계승하여 계승하는 것이다. 부류의 대상을 보존하는 동시에 자신의 대상 속성을 추가하려면 부류의 init 방법에서 슈퍼()를 통해 부류의 init 방법을 호출해야 한다.방법의 재작성이 하위 클래스에서 하위 클래스를 다시 실현하는 방법은 재작성 방식입니다. 첫째, 하위 클래스를 직접 덮어쓰는 실현 방식. 둘째, 하위 클래스의 기능을 보존하고 다른 기능을 추가합니다. 슈퍼()를 통해 하위 클래스의 방법을 호출하고 하위 클래스의 기능을 보존합니다.클래스에서 방법을 호출하는 과정(중점)은 현재 클래스에서 찾습니다. 부류에서 찾지 못했습니다. 부류의 부류에서 찾지 못했습니다. 순서대로 유추하고 기류를 찾을 때까지 기류에서 찾지 못하면 붕괴됩니다.처음 찾은 위치에서 호출해.주의: 슈퍼를 사용할 때는 부모나 부모 대상을 슈퍼 () 로 대체해야 합니다
class Animal(object):
    ''' '''
    # 
    number = 61
    # 
    def __init__(self,name=' ',age=18,sex=' '):
        self.name=name
        self.age=age
        self.sex=sex
    # 
    def shout(self):
        print(' ')
    @classmethod
    def show_number(cls):
        print(' %d '%cls.number)
    @staticmethod
    def complaint():
        print(' ')   
class Cat(Animal):
    food = ' '
    def __init__(self):
        self.color = ' '
        super().__init__()  # __init__() 

    def shout(self):
        print(super().number)
        super().shout()
        print(' ')
cat = Cat()
cat.shout()

연습: Person 클래스를 작성합니다. 속성이 있으면name,age,sex를 작성합니다. Person 대상을 만들 때 반드시name을 주어야 합니다. age에 sex를 부여하면 부여할 수 있지만 부여하지 않아도 됩니다. 그리고 Staff를 써서 Person 클래스에서 계승하여 Person의 모든 속성을 보존하고 새로운 속성salary를 추가해야 합니다.Staff 대상을 만들 때name에 값을 부여해야 하고 다른 것은 Staff 대상을 통해서만 값을 수정할 수 있습니다
class Person:
    def __init__(self,name,age,sex=' '):
        self.name = name
        self.age = age
        self.sex = sex
class Staff(Person):
    def __init__(self,name):
        self.salary = 1000
        super().__init__(name,0)
if __name__ == '__main__':
    s1 = Staff(' ')
    s1.age = 20
    s1.salary = 20000
    s1.sex = ' '
    print(s1.name,s1.age,s1.sex,s1.salary)

7. 연산자 재부팅: 부류가 연산자를 재부팅하였으므로 사용할 수 있습니다


연산자를 다시 쓴 후에sort 방법을 사용할 수 있습니다. 만약에 클래스의 대상이 상응하는 연산자 조작을 지원하기를 원한다면 (예: +, -, *,/, >) 이 과정을 연산자의 재부팅이라고 합니다.
  •   __add__()
    
  •   __gt__(self,other)  # : , 
    

    일반적으로 > 또는
    class Student:
        def __init__(self,name='',age=0,score=0):
            self.name = name
            self.age = age
            self.score = score
        #self: self + ,other + 
        def __add__(self,other):
            return self.score+other.score
            #self: self > ,other + 
        def __gt__(self,other):
            return self.age > other.age
        def __str__(self):
            return ''%(self.__module__,self.__class__,__name__,id(self))
            # return 'Student:%s,%s,%s'%(self.name,self.age,self.score)
    if __name__ == '__main__':
        stu1 =Student()
        stu2 =Student()
        print(stu1 + stu2)
        print(stu1 > stu2)
        print(stu1)
    

    다시 쓰기str. 사용자 정의 대상에 사용할 인쇄 스타일

    좋은 웹페이지 즐겨찾기