小甲魚《零基礎学習Python》課後ノート(三十七):類と対象——対象向けプログラミング

11428 ワード

テスト問題
0.以下のコードはオブジェクト向けプログラミングの特徴を体現していますか?
>>> "FishC.com".count('o')
1
>>> [1, 1, 2, 3, 5, 8].count(1)
2
>>> (0, 2, 4, 8, 12, 18).count(1)
0

マルチステートで、同じメソッドを呼び出すと結果が異なります.
1.プログラマーが同じコードを何度も書きたくないとき、彼らは関数を発明してこのような状況を解決しました.プログラマーがすでにクラスを持っていて、非常に近い新しいクラスを作りたいとき、彼らはどうしますか?新しいクラスが既存のクラスを継承することを定義します.これは、必要なメソッドを簡単に書き換え、追加するだけです.
2.selfパラメータの役割は何ですか.バインド方法.selfパラメータは、インスタンスオブジェクトごとに一意のselfパラメータを持つヒトの身分証明書に似ています.
3.オブジェクトのプロパティやメソッドを外部から直接参照したくない場合は、どうすればいいですか?属性またはメソッド名の前に二重下線を付けることができます.外部から直接アクセスできず、AttributeErrorエラーが表示されます.
>>> class Person:  
		__name = '   '  
	    def getName(self):  
	        return self.__name  
	  
	      
>>> p = Person()  
>>> p.__name  
Traceback (most recent call last):  
	File "", line 1, in <module>  
		p.__name  
AttributeError: 'Person' object has no attribute '__name'  
>>> p.getName()  
'   ' 


「_」が付けられたのでプライベート要素になり、クラスの外部に直接アクセスすることはできませんが、クラスの方法で間接的にアクセスできます.しかし、Pythonは要素名を変更しただけで、「クラス名_変数名」からアクセスできます.Person__name.
4.クラスがインスタンス化された後、どのメソッドが自動的に呼び出されますか?_init__メソッドはクラスインスタンス化時に自動的に呼び出され、魔法メソッドと呼ばれます.
5.次のコードエラーの原因を説明してください.
>>> class Myclass:  
		name = 'FishC'  
	    def myFun(self):  
        print("Hello FishC!")  
  
          
>>> Myclass.name  
'FishC'  
>>> Myclass.myFun()  
Traceback (most recent call last):  
	File "", line 1, in <module>  
		Myclass.myFun()  
TypeError: myFun() missing 1 required positional argument: 'self' 

私たちが一般的に言っているクラスはクラス定義を指し、「Pythonはオブジェクトを持たない場所がない」ため、クラス定義が完了すると自然にクラスオブジェクトになります.このとき、クラスのプロパティ(変数)に直接アクセスできます(Myclass.name).
1つのクラスは無数のオブジェクト(インスタンスオブジェクト)をインスタンス化することができ、Pythonはどのインスタンスオブジェクトがメソッドを呼び出したかを区別するために、メソッドをバインド(selfパラメータを介して)して呼び出す必要がある.インスタンス化されていないクラスオブジェクトは、selfパラメータが欠けているため、メソッドを直接呼び出します.
手を動かす
0.以下の要件に従って1つの遊園地チケットのクラスを定義し、大人2人+子供1人の平日チケットを計算してみる.a.平日運賃100元b.週末運賃は平日の120%c.子供半額
>>> class Ticket(object):
	"""docstring for Ticket"""
	def __init__(self, weekend = False, child = False):
		self.exp = 100
		if weekend:
			self.inc = 1.2
		else:
			self.inc = 1
		if child:
			self.discount = 0.5
		else:
			self.discount = 1
	def calcPrice(self, num):
		return self.exp * self.inc * self.discount * num

	
>>> adult = Ticket()
>>> child = Ticket(child = 1)
>>> print("2   +1        :%.2f" % (adult.calcPrice(2) + child.calcPrice(1)))
2   +1250.00

1.ゲームプログラミング:以下の要件に従って亀類と魚類を定義し、ゲームを作成しようとします.(初心者は必ずしも完全に実現できるとは限らないが、必ず自分で手を出してください.そこから多くの知識を学ぶことができます)a.ゲームシーンを範囲(x,y)と仮定して0<=x<=10、0<=y<=10 b.ゲームは1匹のカメと10匹の魚を生成しますc.それらの移動方向はランダムd.カメの最も大きな移動能力は2(Taはランダムに1か2かを選択することができます)、魚の最大移動能力は1 eです.シーンの端に移動すると、自動逆方向移動f.亀初期化体力100(上限)g.亀は移動するたびに体力消費1 h.亀と魚の座標が重なると、亀が魚を食べ、亀の体力が20 i増加する.魚は体力を計算しないが、この問題は本当に書かれていないため、戦略的に撤退する.