객체 지향 패키징 사례 II
목표
- 군인 폭행 사건
- ID 연산자
꾸러미
- 캡슐화 는 객체 지향 프로그래밍의 주요 기능입니다.
- 객체 지향 프로그래밍 의 첫 번째 단계 - 속성 및 방법 포장 추상으로 클래스 에서
- 외부 세계 는 클래스를 사용하여 객체 를 만든 다음 객체가 메서드를 호출하도록합니다.
- 객체 메서드의 세부 사항은 클래스 내부 에 캡슐화 됩니다.
개체의 속성은 다른 클래스에서 만든 개체 일 수 있습니다.
01. 군인 폭행
수요
- 병사 Xu Sanduo 는 AK47을 가지고 있습니다.
- 군인 은 발사 할 수 있습니다
- 총 은 총알 을 발사 할 수 있습니다
- 총알로 총 을로드 - 총알 수를 늘리십시오.
1.1 총 개발
shoot
방법 요구 사항
- 1> 총알이 있는지 판단하면 총알 없이는 쏠 수 없습니다
- 2>
print
큐를 사용 하여 총알 수를 쏘고 출력
class Gun:
def __init__(self, model):
# 枪的型号
self.model = model
# 子弹数量
self.bullet_count = 0
def add_bullet(self, count):
self.bullet_count += count
def shoot(self):
# 判断是否还有子弹
if self.bullet_count <= 0:
print("没有子弹了...")
return
# 发射一颗子弹
self.bullet_count -= 1
print("%s 发射子弹[%d]..." % (self.model, self.bullet_count))
# 创建枪对象
ak47 = Gun("ak47")
ak47.add_bullet(50)
ak47.shoot()
`
1.2 병사 개발
가정 : 모든 신병은 총 이 없습니다
초기 값이없는 속성 정의
속성을 정의 할 때 설정할 초기 값 을 모르는 경우 다음 과 같이 설정할 수 있습니다. None
None
키워드는 의미가 없습니다.- 나타냅니다 빈 객체를 , 메서드 및 속성없이, 특별한 상수는
None
모든 변수에 할당 가능
fire
방법 요구 사항
- 1> 총이 있는지 확인합니다. 총 없이는 충전 할 수 없습니다.
- 2> 슬로건 외치기
- 3> 총알 로딩
- 4> 촬영
class Soldier:
def __init__(self, name):
# 姓名
self.name = name
# 枪,士兵初始没有枪 None 关键字表示什么都没有
self.gun = None
def fire(self):
# 1. 判断士兵是否有枪
if self.gun is None:
print("[%s] 还没有枪..." % self.name)
return
# 2. 高喊口号
print("冲啊...[%s]" % self.name)
# 3. 让枪装填子弹
self.gun.add_bullet(50)
# 4. 让枪发射子弹
self.gun.shoot()
요약
- 내장 메소드를 사용하여 군인 클래스 생성
__init__
- 속성을 정의 할 때 설정할 초기 값 을 모르는 경우 다음 과 같이 설정할 수 있습니다.
None
- 캡슐화 된 메서드 내에서 다른 클래스에서 만든 자체 개체 속성을 캡슐화 된 메서드를 호출하도록 만들 수도 있습니다.
02. ID 운영자
ID 연산자는 두 개체의 메모리 주소가 동일한 지 (동일한 개체에 대한 참조인지 여부) 를 비교 하는 데 사용됩니다 .
- 그것은
Python
되어None
사용에 권장is
판단 비교할 때
| 运算符 | 描述 | 实例 |
| --- | --- | --- |
| is | is 是判断两个标识符是不是引用同一个对象 | x is y,类似 id(x) == id(y) |
| is not | is not 是判断两个标识符是不是引用不同对象 | x is not y,类似 id(a) != id(b) |
is와 ==의 차이점 :
is
여부를 결정하기 위해 사용될 두 개의 변수 참조 객체는 동일 ==
여부를 판단하는 데 기준 변수 값이 같은지
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a
False
>>> b == a
True