python 다른 버전의_new_차이점 총결산

2747 단어 pythonnew차이점
우리는 모두python의 버전이 다르기 때문에 사용할 때 차이가 있다는 것을 안다.우리가 젊은이들이python3 버전을 선택하는 것을 추천하는 것을 감안하면 이 방면의 차이는 그리 많지 않다.그냥_new_말하자면python2와 3에서의 작법은 다르다. 이전에 접촉이 있었다_new_어린 친구들은 틀림없이 이 문제를 알아차리지 못했을 것이다.다음은 new의 기본 사용법을 설명하고 python의 다른 버전에서_new_의 차이는 상세한 해석을 가져온다.
new 방법이 받아들인 매개 변수도 init와 같지만 init는 클래스 실례를 만든 후에 호출됩니다. new 방법은 바로 이 클래스 실례를 만드는 방법입니다.

class Person(object):
  """Silly Person"""
  def __new__(cls, name, age):
    print '__new__ called.'
    return super(Person, cls).__new__(cls, name, age)
  def __init__(self, name, age):
    print '__init__ called.'
    self.name = name
    self.age = age
  def __str__(self):
    return '<Person: %s(%s)>' % (self.name, self.age)
if __name__ == '__main__':
  piglei = Person('piglei', 24)
print piglei

Python3 및 Python2 중__new__사용이 다르다


Python3의 작법

class Singleton(object):
  def __new__(cls,*args, **kwargs):
    if not hasattr(cls,'_inst'):
      print(cls)
      cls._inst = super(Singleton, cls).__new__(cls)
    return cls._inst
만약 Python3의 작법이 Python2의 작법과 같다면, 꼴찌 두 번째 줄은 틀릴 것이다

"TypeError: object() takes no parameters"
위의 운행 결과에 의하면 우리는python3에서python2를 강제로 사용하는 것은 불가능하다는 것을 발견할 수 있다.
Python __new__() 지식 포인트 확장
__new__() 클래스 실례를 만드는 정적 방법입니다. staticmethod 장식기를 사용하지 않아도 되고 이 방법은 __init__() 초기화 방법이 호출됩니다.
일반적으로 덮어쓰기 _new__()의 구현은 적절한 매개 변수를 사용하여 클래스를 초과하는 슈퍼().__를 호출합니다.new__(), 반환하기 전에 인스턴스를 수정합니다.예:

class demoClass:
  instances_created = 0
  def __new__(cls,*args,**kwargs):
    print("__new__():",cls,args,kwargs)
    instance = super().__new__(cls)
    instance.number = cls.instances_created
    cls.instances_created += 1
    return instance
  def __init__(self,attribute):
    print("__init__():",self,attribute)
    self.attribute = attribute
test1 = demoClass("abc")
test2 = demoClass("xyz")
print(test1.number,test1.instances_created)
print(test2.number,test2.instances_created)
출력 결과는 다음과 같습니다.
__new__(): ('abc',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DF8080> abc
__new__(): ('xyz',) {}
__init__(): <__main__.demoClass object at 0x0000026FC0DED358> xyz
0 2
1 2
python의 다른 버전에 대한_new_서로 다른 점에서 총결한 문장은 여기에 소개되었습니다.python의 서로 다른 버전의_new_어떤 내용이 다른지 저희의 이전 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기