python - 类 类对象 赋值后的分别变化,及删除后为什么还有值
伊谢尔伦
伊谢尔伦 2017-04-18 10:23:36
0
1
534
class CC:
    def setXY(self,x,y):
        self.x=x
        self.y=y
    def printXY(self):
        print(self.x,self.y)

dd=CC()
print(dd.__dict__)                         # {}  #对象CC()的所有成员
print(CC.__dict__)                       #{'__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None, '__dict__': <attribute '__dict__' of 'CC' objects>, 'printXY': <function CC.printXY at 0x0000000000A50268>, '__module__': '__main__', 'setXY': <function CC.setXY at 0   #输出类CC的所有成员
dd.setXY(4,5)
print(dd.__dict__)                       #{'y': 5, 'x': 4}#赋值后类对象有值了

print(CC.__dict__)                       #{'printXY': <function CC.printXY at 0x0000000001160268>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None, 'setXY': <function CC.setXY at 0x00000000011601E0>}#赋值后没变

del CC
#ee=CC()   NameError: name 'CC' is not defined
dd.printXY()                                 # 4 5

第一点是那个self的作用,第二点是为赋值后撒类对象变化了而类却没变

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(1)
小葫芦

python의 모든 것은 객체이고, class도 일종의 객체입니다.

위 그림과 같이 CC을 인스턴스화하면 메모리에 두 개의 개체가 있게 됩니다(녹색 단어는 개체 내부의 속성과 메서드입니다). 하나는 CC이고 다른 하나는 , dd

을 실행하면 dd.setXY(4,5)self로 설정됩니다. dd에는 setXY이 없기 때문에 통역사는 dd에서 상위 클래스를 조회하고 CC에서 setXY을 찾아 self을 실행합니다. 즉, dd, xy,

안에 두 명의 멤버가 더 있습니다.

통역사는 dd의 상위 클래스가 CC인지 어떻게 알 수 있나요?
답은 dd.__class__

CC을 삭제하면 실제로 CC 변수만 삭제되지만 CC 클래스가 차지하는 메모리는 삭제하지 않습니다. dd도 여전히 존재하고 dd 클래스도 여전히 존재하기 때문입니다. __class__CC 속성을 ​​통해 참조됩니다. (python 메모리 관리는 참조 카운팅을 기반으로 합니다.)

그래서 CC 변수로는 클래스를 찾을 수 없고 dd.__class__,

를 통해서는 찾을 수 있다는 것입니다.

그러니까 이렇게 쓰시면 됩니다 ee = dd.__class__()

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!