산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 객체와 클래스

Python 개체 및 클래스

이 자습서에서는 Python 개체 및 클래스의 핵심 기능에 대해 배웁니다. 클래스가 무엇인지, 클래스를 만들고 프로그램에서 사용하는 방법을 배우게 됩니다.

동영상:Python 클래스 및 개체

Python 객체 및 클래스

파이썬은 객체 지향 프로그래밍 언어입니다. 함수에 중점을 둔 프로시저 지향 프로그래밍과 달리 객체 지향 프로그래밍은 객체에 중점을 둡니다.

객체는 단순히 데이터(변수)와 해당 데이터에 작용하는 메서드(함수)의 모음입니다. 마찬가지로 클래스는 해당 개체의 청사진입니다.

우리는 클래스를 집의 스케치(프로토타입)로 생각할 수 있습니다. 여기에는 바닥, 문, 창문 등에 대한 모든 세부 정보가 포함되어 있습니다. 이러한 설명을 기반으로 집을 짓습니다. 집이 오브제입니다.

집의 청사진으로 많은 집을 만들 수 있듯이 클래스에서 많은 개체를 만들 수 있습니다. 객체는 클래스의 인스턴스라고도 하며 이 객체를 생성하는 프로세스를 인스턴스화라고 합니다. .

<시간>

파이썬에서 클래스 정의

파이썬에서 함수 정의가 def 키워드로 시작하는 것처럼 클래스 정의는 class 키워드로 시작합니다.

클래스 내부의 첫 번째 문자열은 docstring이라고 하며 클래스에 대한 간략한 설명이 있습니다. 필수 사항은 아니지만 적극 권장합니다.

다음은 간단한 클래스 정의입니다.

class MyNewClass:
    '''This is a docstring. I have created a new class'''
    pass

클래스는 모든 속성이 정의된 새 로컬 네임스페이스를 만듭니다. 속성은 데이터 또는 함수일 수 있습니다.

이중 밑줄 __로 시작하는 특수 속성도 있습니다. . 예:__doc__ 해당 클래스의 독스트링을 제공합니다.

클래스를 정의하자마자 동일한 이름으로 새 클래스 객체가 생성됩니다. 이 클래스 개체를 사용하면 다른 속성에 액세스하고 해당 클래스의 새 개체를 인스턴스화할 수 있습니다.

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# Output: 10
print(Person.age)

# Output: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

출력

10
<function Person.greet at 0x7fc78c6e8160>
This is a person class
<시간>

파이썬에서 개체 만들기

클래스 개체를 사용하여 다른 속성에 액세스할 수 있음을 확인했습니다.

또한 해당 클래스의 새 개체 인스턴스(인스턴스화)를 만드는 데 사용할 수도 있습니다. 객체를 생성하는 절차는 함수 호출과 유사합니다.

>>> harry = Person()

그러면 harry라는 새 개체 인스턴스가 생성됩니다. . 객체 이름 접두사를 사용하여 객체의 속성에 액세스할 수 있습니다.

속성은 데이터 또는 메소드일 수 있습니다. 개체의 메서드는 해당 클래스의 해당 기능입니다.

이것은 Person.greet 이후로 함수 객체(클래스의 속성), Person.greet 메서드 개체가 됩니다.

class Person:
    "This is a person class"
    age = 10

    def greet(self):
        print('Hello')


# create a new object of Person class
harry = Person()

# Output: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

출력

<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello

self 클래스 내부의 함수 정의에 매개변수가 있지만 간단히 harry.greet()로 메서드를 호출했습니다. 아무 주장 없이. 여전히 효과가 있었습니다.

객체가 메서드를 호출할 때마다 객체 자체가 첫 번째 인수로 전달되기 때문입니다. 따라서 harry.greet() Person.greet(harry)로 변환 .

일반적으로 n개의 인수 목록으로 메서드를 호출하는 것은 첫 번째 인수 앞에 메서드의 개체를 삽입하여 생성된 인수 목록으로 해당 함수를 호출하는 것과 같습니다.

이러한 이유로 클래스에 있는 함수의 첫 번째 인수는 객체 자체여야 합니다. 이것을 일반적으로 self라고 합니다. . 이름을 달리 지정할 수 있지만 규칙을 따르는 것이 좋습니다.

이제 클래스 개체, 인스턴스 개체, 함수 개체, 메서드 개체 및 이들의 차이점에 대해 잘 알고 있어야 합니다.

<시간>

파이썬의 생성자

이중 밑줄 __로 시작하는 클래스 함수 특별한 의미가 있기 때문에 특수 기능이라고 합니다.

특히 관심을 끄는 것은 __init__()입니다. 기능. 이 특수 함수는 해당 클래스의 새 개체가 인스턴스화될 때마다 호출됩니다.

이러한 유형의 함수는 객체 지향 프로그래밍(OOP)에서 생성자라고도 합니다. 일반적으로 모든 변수를 초기화하는 데 사용합니다.

class ComplexNumber:
    def __init__(self, r=0, i=0):
        self.real = r
        self.imag = i

    def get_data(self):
        print(f'{self.real}+{self.imag}j')


# Create a new ComplexNumber object
num1 = ComplexNumber(2, 3)

# Call get_data() method
# Output: 2+3j
num1.get_data()

# Create another ComplexNumber object
# and create a new attribute 'attr'
num2 = ComplexNumber(5)
num2.attr = 10

# Output: (5, 0, 10)
print((num2.real, num2.imag, num2.attr))

# but c1 object doesn't have attribute 'attr'
# AttributeError: 'ComplexNumber' object has no attribute 'attr'
print(num1.attr)

출력

2+3j
(5, 0, 10)
Traceback (most recent call last):
  File "<string>", line 27, in <module>
    print(num1.attr)
AttributeError: 'ComplexNumber' object has no attribute 'attr'

위의 예에서 우리는 복소수를 나타내는 새로운 클래스를 정의했습니다. __init__()라는 두 가지 기능이 있습니다. 변수 초기화(기본값은 0) 및 get_data() 숫자를 올바르게 표시하려면.

위 단계에서 주목해야 할 흥미로운 점은 객체의 속성이 즉석에서 생성될 수 있다는 것입니다. 새 속성 attr을 만들었습니다. num2 개체에 대해 그리고 읽기도 합니다. 그러나 이것은 num1 개체에 대한 속성을 생성하지 않습니다. .

<시간>

속성 및 개체 삭제

del을 사용하여 개체의 모든 속성을 언제든지 삭제할 수 있습니다. 성명. 출력을 보려면 Python 셸에서 다음을 시도하십시오.

>>> num1 = ComplexNumber(2,3)
>>> del num1.imag
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'imag'

>>> del ComplexNumber.get_data
>>> num1.get_data()
Traceback (most recent call last):
...
AttributeError: 'ComplexNumber' object has no attribute 'get_data'

del 문을 사용하여 객체 자체를 삭제할 수도 있습니다.

>>> c1 = ComplexNumber(1,3)
>>> del c1
>>> c1
Traceback (most recent call last):
...
NameError: name 'c1' is not defined

실제로는 그보다 더 복잡합니다. c1 = ComplexNumber(1,3)를 수행할 때 , 새 인스턴스 개체가 메모리에 생성되고 이름이 c1입니다. 결합합니다.

del c1 명령에서 , 이 바인딩이 제거되고 이름 c1 해당 네임스페이스에서 삭제됩니다. 그러나 개체는 메모리에 계속 존재하며 다른 이름이 바인딩되어 있지 않으면 나중에 자동으로 소멸됩니다.

Python에서 이러한 참조되지 않은 개체의 자동 소멸을 가비지 수집이라고도 합니다.

<그림>

python

  1. C# 클래스 및 개체
  2. C# 추상 클래스 및 메서드
  3. C# 부분 클래스 및 부분 메서드
  4. C# 봉인된 클래스 및 메서드
  5. C++ 클래스 및 개체
  6. C++ friend 함수 및 friend 클래스
  7. 파이썬 키워드와 식별자
  8. Python 문, 들여쓰기 및 주석
  9. Python 디렉토리 및 파일 관리
  10. Python 사용자 정의 예외