Python 생성자 및 __init__
생성자를 실제로 "생성자"라고 부르는 이유는 무엇입니까? 그들의 목적은 무엇이며 클래스의 메서드와 어떻게 다릅니 까?
또한 __init__
한 클래스에 더 많은 것이있을 수 있습니까? 다음과 같은 것을 시도했습니다. 누군가가 결과를 설명해 주시겠습니까?
>>> class test:
def __init__(self):
print "init 1"
def __init__(self):
print "init 2"
>>> s=test()
init 2
마지막으로 __init__
오퍼레이터 오버 로더입니까?
Python에는 함수 오버로딩이 없습니다. 즉, 이름은 같지만 인수가 다른 여러 함수를 가질 수 없습니다.
코드 예제에서, 당신은하지 않을 과부하 __init__()
. 두 번째 정의 가 이름 을 새 메소드에 리 바인드__init__
하여 첫 번째 메소드에 액세스 할 수 없게 만드는 경우가 발생합니다 .
생성자에 대한 일반적인 질문에 관해서 는 Wikipedia 가 좋은 출발점입니다. Python 관련 항목의 경우 Python 문서를 적극 권장합니다 .
생성자를 실제로 "생성자"라고 부르는 이유는 무엇입니까?
생성자 (이름 __new__
)는 클래스의 새 인스턴스를 만들고 반환합니다. 따라서 C.__new__
클래스 메서드는 클래스 C 의 생성자 입니다.
C.__init__
만든 후 인스턴스 메소드는 호출자에게 다시 전달되기 전에를 초기화하기 위해, 특정 인스턴스라고합니다. 따라서이 메서드는 C의 새 인스턴스에 대한 이니셜 라이저 입니다.
클래스의 메서드와 어떻게 다릅니 까?
에 명시된 바와 같이 공식 문서 __init__
입니다 인스턴스가 생성 된 후라고합니다 . 다른 방법은이 치료를받지 않습니다.
그들의 목적은 무엇입니까?
생성자의 목적은 C.__new__
새 C
인스턴스를 생성하는 동안 사용자 지정 동작을 정의하는 것 입니다.
이니셜 라이저의 목적 은 생성 된 후의 C.__init__
각 인스턴스에 대한 사용자 지정 초기화를 정의 C
하는 것입니다.
예를 들어 Python을 사용하면 다음을 수행 할 수 있습니다.
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
그러나의 모든 인스턴스 가 10과 같은 Test
속성을 갖도록하려면 x
해당 코드를 내부에 넣을 수 있습니다 __init__
.
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
모든 인스턴스 메서드 (클래스의 특정 인스턴스에서 호출되는 메서드)는 인스턴스를 첫 번째 인수로받습니다. 그 인수는 일반적으로 self
.
constructor와 같은 클래스 메서드는 __new__
대신 클래스를 첫 번째 인수로받습니다.
이제 x
속성에 대한 사용자 지정 값을 원한다면 해당 값을 인수로 전달하면됩니다 __init__
.
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
나는 이것이 당신이 의심을 제거하는 데 도움이되기를 바랍니다. 그리고 당신은 이미 다른 질문에 대한 좋은 답변을 받았기 때문에 여기서 멈추겠습니다 :)
클래스는 단순히 객체를 생성하는 청사진입니다. 생성자는 개체를 만들 때마다 실행되는 일부 코드입니다. 따라서 두 개의 생성자를 갖는 것은 의미가 없습니다. 일어나는 일은 두 번째 오버가 첫 번째를 쓰는 것입니다.
일반적으로 사용하는 것은 다음과 같이 해당 개체에 대한 변수를 만드는 것입니다.
>>> class testing:
... def __init__(self, init_value):
... self.some_value = init_value
따라서 다음과 같이이 클래스에서 객체를 생성 할 수 있습니다.
>>> testobject = testing(5)
The testobject will then have an object called some_value
that in this sample will be 5.
>>> testobject.some_value
5
But you don't need to set a value for each object like i did in my sample. You can also do like this:
>>> class testing:
... def __init__(self):
... self.some_value = 5
then the value of some_value will be 5 and you don't have to set it when you create the object.
>>> testobject = testing()
>>> testobject.some_value
5
the >>> and ... in my sample is not what you write. It's how it would look in pyshell...
coonstructors are called automatically when you create a new object, thereby "constructing" the object. The reason you can have more than one init is because names are just references in python, and you are allowed to change what each variable references whenever you want (hence dynamic typing)
def func(): #now func refers to an empty funcion
pass
...
func=5 #now func refers to the number 5
def func():
print "something" #now func refers to a different function
in your class definition, it just keeps the later one
There is no notion of method overloading in Python. But you can achieve a similar effect by specifying optional and keyword arguments
참고URL : https://stackoverflow.com/questions/8985806/python-constructors-and-init
'developer tip' 카테고리의 다른 글
쉘 스크립트의 변수에 명령을 저장하는 방법은 무엇입니까? (0) | 2020.08.25 |
---|---|
Heroku 애플리케이션 DNS를 Godaddy 도메인에 구성하는 방법은 무엇입니까? (0) | 2020.08.25 |
폴더에서 하위 모듈 저장소를 만들고 git 커밋 기록을 유지합니다. (0) | 2020.08.25 |
Intellij IDEA에서 메서드 매개 변수 힌트를 표시하는 방법은 무엇입니까? (0) | 2020.08.25 |
'확장'파일 속성 읽기 / 쓰기 (C #) (0) | 2020.08.25 |