Python 연구 노트 8 : 완전한 객체 지향 프로그래밍

我之前也写了一篇关于面向对象编程的博客,两篇博客内容相近,包含了我这两次学习的全部内容

첫 번째 블로그

1. 이스케이프 문자

  • \ n : 줄 바꿈
  • \ t : 탭 문자, 탭
  • "\"뒤에는 문자를 나타내는 8 진수 또는 16 진수가 올 수 있습니다 (예 : \ 141, \ x61).
  • "\"다음에는 문자를 나타내는 유니 코드 문자 코드가 올 수 있습니다.
  • "\"에 이스케이프를 표시하지 않으려면 앞에 r을 추가 할 수 있습니다 (예 : r \).

2. 형식

  • 방법 1 : "%"사용
  • 방법 2 : 형식 사용
  • 방법 3 : 문자열 앞에 문자 f 추가
a, b = 5, 10

# 方法1:
print('%d * %d = %d' % (a, b, a * b))

# 方法2:
print('{0} * {1} = {2}'.format(a, b, a * b))

# 方法3:
print(f'{a} * {b} = {a * b}')    # 适用于python 3.6以后的版本

3. 객체 지향 프로그래밍

  • 객체 지향의 경우 모든 사람이 익숙하다고 생각하지만 객체 지향이 무엇인지 간략하게 요약하는 방법은 무엇입니까? 이것은 매우 흥미로운 질문입니다. C 언어, C #, 자바 등의 프로그래밍 언어를 공부했지만 객체 지향의 해석은 아직 명확하지 않습니다. 이것은 저를 괴롭히는 질문입니다 .. 객체 지향이란 무엇입니까?

  • "데이터 구조 및 메소드 세트를 구성하여 객체로 처리하고, 동일한 동작을 가진 객체를 클래스로 그룹화하고, 클래스 캡슐화를 통해 내부 세부 정보를 숨기고, 상속을 통해 클래스 전문화를 실현합니다. (특수화) 및 일반화 (일반화), 다형성 ( 다형성) 객체 유형에 따라 동적 할당을 달성합니다. "이러한 설명은 이해하기 쉽지 않을 수 있습니다.

  • 그러나 오늘 나는 이해하기 더 쉬운 설명을 보았다.
    그림을 아십시오

4. 클래스와 객체

  • 간단히 말해서, 클래스는 객체의 청사진이자 템플릿이고 객체는 클래스의 인스턴스입니다.
  • 이 설명은 개념을 설명하기 위해 개념을 사용하는 것과 비슷하지만 적어도이 문장에서 볼 수 있습니다.
    • 클래스는 추상적 인 개념이고 객체는 구체적인 것입니다.
  • 객체 지향 프로그래밍의 세계에서 모든 것은 객체이고 객체에는 속성과 동작이 있으며 각 객체는 고유하며 특정 클래스 (유형)에 속해야합니다.
  • 공통된 특성을 공유하는 많은 객체의 정적 특성 (속성)과 동적 특성 (행동)을 추출 할 때 "클래스"라는 것을 정의 할 수 있습니다.

5. 클래스 정의

  • 클래스 키워드
  • 그 중에서 클래스에 작성된 함수를 보통 (객체) 메소드라고하며, 이러한 메소드는 객체가받을 수있는 메시지입니다.
class Student(object):

    # __init__是一个特殊方法用于在创建对象时进行初始化操作
    # 通过这个方法我们可以为学生对象绑定name和age两个属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

        
    def study(self, courseName):
        print('%s正在学习%s.' % (self.name, courseName))

        
    # PEP 8要求标识符的名字用全小写多个单词用下划线连接
    # 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)
    def watchMovie(self):
        if self.age < 12:
            print('%s观看《喜羊羊》.' % self.name)
        else:
            print('%s快去学校上课.' % self.name)
            

6. 개체 생성 및 사용

  • 클래스를 정의한 후 다음과 같은 방법으로 객체를 생성하고 객체에 메시지를 보낼 수 있습니다.
def main():
    # 创建学生对象并指定姓名和年龄
    stu1 = Student('amy', 21)
    # 给对象发study消息
    stu1.study('Python')
    # 给对象发watchMovie消息
    stu1.watchMovie()
    stu2 = Student('李小白', 15)
    stu2.study('高等数学')
    stu2.watchMovie()


if __name__ == '__main__':
    main()

7. 액세스 가시성 문제

  • Python에서는 속성 및 메소드에 대한 액세스 권한 유형이 공개 및 비공개 두 가지뿐입니다. 속성을 비공개로 설정하려면 속성 이름을 지정할 때 시작 부분으로 두 개의 밑줄을 사용할 수 있습니다.
class Test:

    def __init__(self, name):
        self.__name = Jackson

    def __bar(self):
        print(self.__name)
        print('__age')


def main():
    test = Test('hello')
    test.__age()       # AttributeError: 'Test' object has no attribute '__age'
    print(test.__name) # AttributeError: 'Test' object has no attribute '__name'


if __name__ == "__main__":
    main()

사례 1 : 지정된 길이의 인증 코드를 생성하는 기능 설계, 인증 코드는 대소 문자와 숫자로 구성

import random


def generateCode(codeLen=4):
    """
    生成指定长度的验证码

    :param codeLen: 验证码的长度(默认4个字符)

    :return: 由大小写英文字母和数字构成的随机验证码
    """
    allChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    lastPos = len(allChars) - 1   # 生成allChars的长度,应为:61
    code = ''                     # 以空格隔开
    for _ in range(codeLen):
        index = random.randint(0, lastPos)
        code += allChars[index]
    return code

사례 2 : Yanghui 삼각형 인쇄

def main():
    num = int(input('请输入行数为: '))
    yh = [[]] * num
    for row in range(len(yh)):
        yh[row] = [None] * (row + 1)
        for col in range(len(yh[row])):
            if col == 0 or col == row:
                yh[row][col] = 1
            else:
                yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1]
            print(yh[row][col], end='\t')
        print()


if __name__ == '__main__':
    main()

사례 3 : 2 색 볼 번호 선택

  • 이 예는 상대적으로 전문적인 지식을 포함하고 있는데 이해가 안 됐습니다. 읽은 후 여러분이 어떻게 생각하는지 독자들이 말해 주셨으면합니다.
from random import randrange, randint, sample


def display(balls):
    """
    输出列表中的双色球号码
    """
    for index, ball in enumerate(balls):
        if index == len(balls) - 1:
            print('|', end=' ')
        print('%02d' % ball, end=' ')
    print()


def random_select():
    """
    随机选择一组号码
    """
    red_balls = [x for x in range(1, 34)]
    selected_balls = []
    selected_balls = sample(red_balls, 6)
    selected_balls.sort()
    selected_balls.append(randint(1, 16))
    return selected_balls


def main():
    n = int(input('机选几注: '))
    for _ in range(n):
        display(random_select())


if __name__ == '__main__':
    main()

포괄적 인 사례 1 : 자동 시간 표시로 디지털 시계를 설명하는 클래스 정의

from time import sleep


class Clock(object):
    """数字时钟"""

    def __init__(self, hour=0, minute=0, second=0):
        """初始化方法

        :param hour: 时
        :param minute: 分
        :param second: 秒
        """
        self._hour = hour
        self._minute = minute
        self._second = second

    def run(self):
        """走字"""
        self._second += 1
        if self._second == 60:
            self._second = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    def show(self):
        """显示时间"""
        return ('%02d:%02d:%02d' % (self._hour, self._minute, self._second))

def main():
    clock = Clock(12, 00, 00)
    while True:
        print(clock.show())
        sleep(1)
        clock.run()


if __name__ == '__main__':
    main()

추천

출처blog.csdn.net/amyniez/article/details/104557045