Python 클래스 귀속 방법 및 비귀속 방법 실례 분석

5988 단어 Python종류바인딩
1. 귀속 방법
  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를 사용하여 함수를 장식했다. 그러면 이 함수는 일반 함수와 별 차이가 없다.일반 함수라면 함수 매개 변수 전달 규칙에 따라 몇 개의 매개 변수가 있으면 몇 개의 매개 변수를 전달한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기