자바 변환 Python 대상 프로 그래 밍
7458 단어 Python
class 에서 모든 함수 의 첫 번 째 입 참 은 self 이름 이 어야 합 니 다. 자바 의 this 에 해당 합 니 다. 자바 류 의 방법 은 this 를 인삼 에 명시 적 으로 넣 지 않 았 을 뿐 python 에 서 는 self 가 표시 하 는 성명 을 함수 의 입 참 에 넣 었 습 니 다. 물론 함수 가 진정 으로 호출 될 때 self 라 는 변 수 는 들 어 올 필요 가 없습니다.Self 는 Python 에서 약 속 된 매개 변수 이름 으로 다른 이름 으로 바 꿀 수 있 습 니 다.
class 의 구조 기 는 반드시init__이름 을 짓 는 것 은 자바 와 차이 가 매우 크다. 자바 는 자신의 유형 이다.
Python 의 class 의 구성원 변 수 는 입 니 다.init__구 조 를 할 때 지정 하고 값 을 부여 한 다 는 점 은 자바 와 의 차이 가 매우 크다. 자바 에서 구성원 변 수 는 미리 설명 한 것 이다.
와init__대응 하 는 폐기 함 수 는del__함수, 대상 이 소각 되 었 을 때 호출 합 니 다.
2. 인 스 턴 스 생 성 은 new 키워드 가 없 으 며, 클래스 이름 으로 대상 을 만 듭 니 다:
entityName= ClassName(param1,param2,……)
3. 인 스 턴 스 구성원 변수 와 함수 의 접근 은 자바 와 마찬가지 로 대상 이름 에 '...' 을 추가 하 는 방식 입 니 다.인 스 턴 스 생 성 후 멤버 변 수 를 수시로 추가 하고 삭제 할 수 있 습 니 다. JS 문법 과 마찬가지 로 이것 은 강 한 대상 유형 인 자바 언어 와 천양지차 의 차이 입 니 다. 자바 가 방금 Python 으로 전환 한 것 을 이해 하지 못 합 니 다. 이것 이 무슨 대상 을 대상 으로 하 는 것 입 니까? 이것 은 분명히 과정 을 대상 으로 하 는 것 입 니 다.python 의 class 는 능력, 함수 기능 을 더 많이 정의 할 수 있 습 니 다. 구성원 변 수 는 약화 되 고 자바 의 interface 와 더욱 가 깝 습 니 다.
getattr (obj, name [, default]): 방문 대상 의 속성 입 니 다.
hasattr (obj, name): 속성 이 있 는 지 확인 합 니 다.
setattr (obj, name, value): 속성 을 설정 합 니 다.속성 이 존재 하지 않 으 면 새 속성 을 만 듭 니 다.
delattr (obj, name): 속성 삭제.
4. 내 장 된 클래스 속성, 모든 클 라 스 를 통 해 내 장 된 클래스 를 통 해 클 라 스 의 관련 정 보 를 얻 을 수 있 습 니 다.
__dict__:클래스 속성
__doc__:클래스 문서 (class 성명 의 첫 줄)
__name__:유명무실 하 다
__module__:클래스 가 있 는 모듈
__bases__:부류 의 모든 부류
1, 2, 3, 4 를 결합 하여 제시 한 예:
class User:
'This is user class'
count=0
def __init__(self,name,age):
self.name=name
self.age=age
User.count+=1
def showMe(self):
print("Name: %s age: %s No. %d" %(self.name,self.age,self.count))
def __del__(self):
User.count -= 1
print("%s die: " % self.name)
zhangsan = User('zhangsan',21)
zhangsan.showMe()
lisi = User('lisi',32)
lisi.showMe()
print(zhangsan.count)
zhangsan.wife=' '
lisi.children=[' ',' ']
print(zhangsan.wife)
print(lisi.children)
#
print(User.__doc__)
del zhangsan.wife
#print(zhangsan.wife)
실행 결과:
Name: zhangsan age: 21 No. 1
Name: lisi age: 32 No. 2
2
[' ', ' ']
This is user class
zhangsan die:
lisi die:
마지막 줄 을 놓 으 면 오류 가 발생 합 니 다. 멤버 변수 가 삭제 되 었 기 때 문 입 니 다!
5. Python 도 자동 GC 로 겉 으로 는 JVM 의 GC 효과 와 같 지만 실현 메커니즘 은 완전히 다르다.JVM 의 GC 는 루트 를 찾 습 니 다. 스 택 의 포인터 나 핸들 에 사용 되 어 회수 여 부 를 결정 합 니 다.Python 은 계수 디자인 을 인용 하여 순환 쓰레기 수집 과 같은 배열 이 필요 한 장면 을 나열 했다.
6 Python 이 OO 라 고 불 리 는 이상 코드 의 중용 성 을 해결 하기 위해 계승 도 지원 합 니 다. 계승 하 는 문법 은?
class subClassName(parentClassA,parentClassB,…):
맞 아, 문법 에서 얼마나 계승 하 는 지 알 수 있 고 이런 계승 방식 에서 아버지 류 에서 중복 되 는 함수 가 있 으 면 어 떡 하지?실측 을 통 해 클 라 스 성명 시 계승 클래스 괄호 의 우선 순위 로 결정 되 며 왼쪽 우선 순 위 는 오른쪽 보다 크다.이 점 은 자바 개발 자로 서 매우 어색 하 다. 모두 아버지 이다. 순서에 따라 친아버지, 양부, 의부 의 구분 도 있다.
다 상속 이 가 져 온 또 다른 의견 차이 가 생 겼 습 니 다. 왼쪽 에 있 는 할아버지 의 함수 와 오른쪽 에 있 는 아버지 가 가지 고 있 는 함수 중 어느 우선 순위 가 더 높 습 니까?코드 를 통 해서 만 직접 측정 할 수 있 습 니 다:
예:
class A:
def foo(self):
print('called A.foo()')
class B(A):
def foo(self):
print('called B.foo()')
class C(A):
def foo(self):
print('called C.foo()')
class D(B, C):
pass
d = D()
d.foo()
D 가 계승 하 는 괄호 중 BC 의 순 서 를 바 꿔 서 실행 해 보고, Class B 의 foo 방법 을 빼 고 다시 시도 해 본 결과 파 이 썬 의 계승 순 서 는 항렬 에 따라 좌우 순 으로 나 타 났 다.
다른 부분 은 자바 와 마찬가지 로 같은 함수 명 이 먼저 짝 짓 기 클래스 를 만 들 고 부모 클래스 와 일치 합 니 다.하위 클래스 재 작성 부모 클래스 함수 등
7. 자바 의 모든 대상 이 Object 에서 계승 한 것 처럼 우 리 는 python 의 클래스 도 object 초 류 를 스텔스 로 계승 한 것 으로 이해 할 수 있 습 니 다. 그 초 류 에서 이러한 함 수 를 계승 한 것 입 니 다.
__init__(self [, args...]) 구조 기
__del__(self) 소각 함수
__str__(self) 는 자바 의 toString 에 해당 합 니 다.
__cmp__(self, x) 비교 함수
__add__(self, other) 덧셈 연산 함수
8 가지 함수 의 수식 및 범위.
자바 의 방법 은 private, proctected, 기본, Public 네 가지 개방 단계 로 나 뉘 는데 python 은 함수 에 대해 범위 제한 이 있 습 니 다. 수식 자 를 통 해 정 의 된 것 이 아니 라 함수 명명 규범 을 통 해 정 의 된 것 입 니 다.
__function__:좌우 각 두 밑줄 로 둘러싸 인 함수 명 은 시스템 등급 의 함수 입 니 다. 예 를 들 어init__
__function: 밑줄 친 두 함수 이름 은 자바 의 private 에 해당 합 니 다.
_function: 밑줄 친 함수 이름, 자바 의 proctected 에 해당 합 니 다.
function: 기본적으로 수정자 가 없 는 것 은 Public 입 니 다.
5, 6, 7, 8 을 결합 하여 제시 한 예:
class People :
def __init__(self,name):
print('This is people init')
self.name=name
def __del__(self):
print('%s die' %self.name)
def _protectedFunction(self):
print('This function is protected')
'''
def __str__(self):
return self.name
'''
#
class Worker(People) :
'This is Worker class'
def __init__(self,name,job,salary):
print('This is mother init function')
People.__init__(self,name)
self.job=job
self.salary=salary
def doJob(self,someBody):
print('Do job for somebody %s for %d salary' %(someBody,self.salary))
def __add__(self, other):
return Worker(self.name+other.name,self.job+other.job,self.salary+other.salary)
def __privateFunction(self):
People._protectedFunction(self)
def publicFunction(self):
People._protectedFunction(self)
#
class Parent(People) :
'This is Parent class'
def __init__(self,name,children):
print('This is Parent init function')
People.__init__(self, name)
self.children=children
def teach(self):
print('teach children %s' %self.children)
class WorkingParent(Worker,Parent) :
'This is WorkingParent class'
def __init__(self,name,job,salary,children):
print('This is WorkingParent init function')
Worker.__init__(self, name,job,salary)
self.children = children
def think(self):
print('How to balance job and children?')
children=[' ',' ']
zhangsan = WorkingParent('zhangsan','pastor',1000,children)
zhangsan.think()
zhangsan.teach()
zhangsan.doJob('king')
lisi = Worker('lisi','student',100)
newOne = lisi+zhangsan
newOne.doJob('newJob')
newOne.publicFunction()
print(newOne)
실행 결과
This is WorkingParent init function
This is mother init function
This is people init
How to balance job and children?
teach children [' ', ' ']
Do job for somebody king for 1000 salary
This is mother init function
This is people init
This is mother init function
This is people init
Do job for somebody newJob for 1100 salary
This function is protected
<__main__.worker object="" at="">
zhangsan die
lisi die
lisizhangsan die
People 중의 를str__주 해방 을 보면 최종 인쇄 대상 을 볼 수 있 을 때 변화 가 생 겼 는데 자바 의 toString () 방법 을 다시 쓴 셈 이다.
주 프로그램 에서 호출 을 시도 할 수 있 습 니 다private Function () 방법, 이상 한 방법 은 존재 하지 않 습 니 다.
피 플 중의protected Function () 방법 을 더 블 밑줄 로 바 꾸 어 보 세 요.
결론: Python 의 OO 와 자바 의 OO 는 범위 가 크 지 않 고 가장 큰 차이 점 은 다 중 계승 이 약간의 변 화 를 가 져 올 수 있다 는 것 이다. 그러나 계승 순 서 를 이해 하고 다 중 집적 을 사용 할 때 주의해 야 할 점도 뚜렷 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.