자바 변환 Python 대상 프로 그래 밍

7458 단어 Python
1 class 의 작성 과 문법
  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 는 범위 가 크 지 않 고 가장 큰 차이 점 은 다 중 계승 이 약간의 변 화 를 가 져 올 수 있다 는 것 이다. 그러나 계승 순 서 를 이해 하고 다 중 집적 을 사용 할 때 주의해 야 할 점도 뚜렷 하 다.

좋은 웹페이지 즐겨찾기