Python 클래스 귀속 방법 및 비귀속 방법 실례 분석
1.대상의 귀속 방법
우선 우리는 하나의 지식점을 명확히 한다. 클래스의 방법이나 함수는 기본적으로 대상에 귀속되어 사용된다.다음은 실례를 통해 귀속 방법의 응용을 천천히 해석하겠습니다.
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
pass
p = People('xiaohua',18)
print(p.talk)
:
<bound method People.talk of <__main__.People object at 0x000000F802C69358>>
위의 출력 결과를 보면 talk () @ 클래스의 방법은 대상에 귀속되어 사용됩니다.다음은 다른 상황을 보고 있습니다.
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def talk():
pass
p = People('xiaohua',18)
print(p.talk)
:
<bound method People.talk of <__main__.People object at 0x000000FF68F39358>>
현재, 우리는talk () 함수의 매개 변수를 제거했는데, 결과는 위와 같다.이것은 클래스의 방법이든 클래스의 함수든 기본적으로 대상에 귀속되어 사용된다는 것을 설명한다.대상에 귀속해서 사용하는 것은 수동으로 대상을 전송하지 않아도 된다는 장점이 있다.대상은 자동으로 클래스에 전달됩니다.만약 네가 믿지 않는다면, 우리는 아래의 예를 살펴보자.
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def talk():
pass
p = People('xiaohua',18)
print(People.talk)
print(p.talk)
:
<function People.talk at 0x000000C54E3D0A60>
<bound method People.talk of <__main__.People object at 0x000000C54E249358>>
위에서 잘 설명한 바와 같이 만약에 클래스가 클래스의 방법을 호출한다면 이 방법은 단지 하나의 함수일 뿐이다. 그러면 함수인 이상 자동 전치라는 기능이 없을 것이다.다음 코드를 살펴보겠습니다.
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self):
pass
p = People('xiaohua',18)
People.talk() 1
p.talk() 2
# 1
talk() missing 1 required positional argument: 'self'
# 2
위의 출력 결과를 보면 클래스 호출 클래스의 방법이 있을 때 i는 자동 값을 전달하지 않는다. 즉, 함수에 몇 개의 매개 변수가 있으면 우리는 몇 개의 매개 변수를 전달해야 한다.결과가 정상적으로 작동하려면 클래스 이름이talk () 를 호출할 때 매개 변수를 하나하나 전달합니다.즉,People.talk(312312)
@ 매개 변수는 임의로 전달될 수 있지만, 반드시 전달되어야 합니다.대상이 클래스의 방법을 호출할 때 전달할 필요가 없다. 예를 들어 위의 2가 정상적으로 실행된다.차이점을 알았으니 다음 코드를 살펴보자.
class People:
def __init__(self,name,age):
self.name = name
self.age = age
def talk():
pass
p = People('xiaohua',18)
People.talk() 1
p.talk() 2
# 1
# 2
talk() takes 0 positional arguments but 1 was given
출력 결과를 보면 People이 토크 () 방법을 호출할 때 매개 변수를 전달할 필요가 없습니다.한편, 대상이 talk () 를 호출할 때, 대상이 자신의 귀속 방법을 호출하면 자동으로 대상을 첫 번째 매개 변수로 전달하기 때문에, 클래스에서 talk () 방법이 매개 변수를 가지고 있지 않을 때, 당신은 그것을 전달하는데, 분명히 오류를 보고할 것이다.결론은 다음과 같습니다.
1.클래스 중의 방법과 함수는 모두 대상에 귀속되어 사용된다.
2.귀속 방법은 모두 자동으로 값을 전달하는 기능이 있다.전달된 값은 대상 자체다.
3.클래스가 귀속 방법을 호출하려면 함수의 매개 변수 규칙을 따라야 하고, 몇 개의 매개 변수가 있으면 몇 개의 매개 변수를 전달해야 한다.
똑똑한 당신은 클래스 중의 방법이 모두 대상에 귀속되어 사용되는 만큼 클래스에 귀속되어 사용하는 방법이 있습니까?
답은, 당연히 있지!
2.클래스의 귀속 방법
클래스의 방법은 기본적으로 대상에 귀속되어 사용되기 때문에 우리는 클래스의 귀속 방법을 대상의 귀속 관계를 해제하고 클래스에 귀속시키는 조치를 취해야 한다.
python에서 @classmethod 방법을 도입하여 클래스의 방법을 클래스에 연결합니다.다음은 코드를 살펴보겠습니다.
class People:
@classmethod
def talk(cls):
pass
p = People()
print(People.talk)
#
<bound method People.talk of <class '__main__.People'>>
상술한 결과를 통해 알 수 있듯이 우리는 장식기를 추가하여 클래스를 대상에 연결하는 방법을 클래스에 귀속시켰다.우리가 이전에 분석한 바와 같이, 만약 한 방법이 누구에게 귀속된다면, 이 함수를 호출할 때, 자동으로 이 호출자를 첫 번째 매개 변수로 함수에 전달할 것이다.단, 클래스에 귀속시키는 방법은 대상에 귀속시키는 방법과 조금 다르다.
class People:
def __init__(self,name):
self.name = name
@classmethod
def talk(cls):
pass
p = People('xiaohua')
print(People.talk)
print(p.talk)
#
<bound method People.talk of <class '__main__.People'>>
<bound method People.talk of <class '__main__.People'>>
즉, 대상이 클래스의 귀속 방법을 호출할 때 클래스를 매개 변수로 기본적으로 전달합니다!그래서 아래에서 정상적으로 실행합니다. @ 방법으로 클래스에 귀속되지 않고 대상이 매개 변수를 전달하지 않아서 오류를 보고하지 않습니다!
class People:
@classmethod
def talk(cls):
pass
p = People()
People.talk()
p.talk()
단, 토크 () 에 인자가 없으면 다음 코드가 모두 오류를 보고합니다.
class People:
@classmethod
def talk():
pass
p = People()
People.talk()
p.talk()
#
talk() takes 0 positional arguments but 1 was given
두 개의 오류 결과가 일치한다는 것은 대상이 클래스의 귀속 방법을 호출할 때도 클래스를 자동으로 전달하고 함수 매개 변수의 전달 규칙을 따를 필요가 없다는 것을 설명한다.클래스 중의 귀속 방법도 기본적으로 이 두 가지에 있다. 아무리 변화해도 아래의 규칙을 기억하면 이런 상황에 부딪히면 다시는 틀리지 않는다.
클래스의 방법은 기본적으로 대상에 귀속되어 사용되며, 대상이 귀속 방법을 호출할 때 자동으로 대상을 첫 번째 매개 변수로 전달합니다.클래스를 호출하려면 함수 매개 변수가 일일이 대응하는 규칙을 따라야 하고 몇 개의 매개 변수가 있으면 몇 개의 매개 변수를 전달해야 한다.만약 한 방법이 @classmethod 장식기를 사용한다면, @ 방법은 클래스에 연결되어 있으며, 대상이 호출되든 클래스가 호출되든 클래스를 첫 번째 매개 변수로 전달합니다.
2. 비귀속 방법
위에서 말한 바와 같이 클래스 중의 방법은 대상에 귀속되어 사용하거나 클래스에 귀속되어 사용하려면 두 사람에게 귀속되지 않는 함수가 있습니까?
답안: 물론입니다.python은 @staticmethod를 제공하여 귀속 관계를 해제하고 하나의 클래스의 방법을 일반 함수로 변경할 수 있습니다.
다음은 코드 예제입니다.
import hashlib
import time
class MySQL:
def __init__(self,host,port):
self.id=self.create_id()
self.host=host
self.port=port
@staticmethod
def create_id(): #
m=hashlib.md5(str(time.clock()).encode('utf-8'))
return m.hexdigest()
print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #
conn=MySQL('127.0.0.1',3306)
print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #
위의 출력 결과에서 알 수 있듯이 @staticmethod를 사용하여 함수를 장식했다. 그러면 이 함수는 일반 함수와 별 차이가 없다.일반 함수라면 함수 매개 변수 전달 규칙에 따라 몇 개의 매개 변수가 있으면 몇 개의 매개 변수를 전달한다.이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.