セブンティーン、パイソンのオブジェクト指向の継承

オブジェクト指向の継承では非常に重要な機能です
子どもと親クラス、サブクラスは親クラスのプロパティとメソッドにいくつかの拡張のため、延長の親クラスであります
例:継承を持っていませんでした
 
#ドア番クラスとステータスを定義します
クラスのドア(オブジェクト):
デフ__init __(自己、NUM、ステータス):
self.num num個
self.status =ステータス
デフオープン(自己):
self.status = 'オープン'
(自己)DEF近いです:
self.status = '閉じます'
 
#扉の定義クラスをロックすることができます
ロック可能なクラス(オブジェクト):
デフ__init __(自己、NUM、状態、ロックされました):
self.num num個
self.status =ステータス
ロック= self.locked
デフオープン(自己):
self.lockedない場合:あなたがロックしない場合、私はそれを#開きます
self.status = 'オープン'
他:
プリントは「ドアがロックされています」
(自己)DEF近いです:
self.status = '閉じます'
================================================== ====================
================================================== ====================
================================================== ====================
ロック可能な上記の例で、私たちは、このクラスは、ドアクラスの基本はロックされたインスタンス変数を追加していることがわかりました
ロックする方法はありません、残りの部分は同じです。
#継承
クラスのドア(オブジェクト):
デフ__init __(自己、NUM、ステータス):
self.num num個
self.status =ステータス
デフオープン(自己):
self.status = 'オープン'
(自己)DEF近いです:
self.status = '閉じます'
 
#親クラスのドアから継承されます。
クラスロック可能(扉):
デフ__init __(自己、NUM、状態、ロックされました):
ここでは、スーパー(ロック可能な、自己).__のinit __(NUM、ステータス)#スーパーあなたのコンストラクタのnumはあなたの父のクラスとステータス2つのインスタンス変数を継承した説明の文言が固定されている(サブクラス名、自己)
ここself.locked =ロックされた#を使用して、親クラスを継承するため、私たちはここにself.numする必要はありませんし、self.statusが新しいロックされ、それらに値を割り当て、それが割り当てる必要があります
openメソッドのオーバーロードの#
デフオープン(自己):
self.lockedない場合:あなたがロックしない場合、私はそれを#開きます
#调用父类的方法
super(Lockable,self).open()
else:
print "the door is locked"
 
 
class Unlockable(Door): #这里我定义了一个没有锁的门,并且我什么都不做,它继承了父类Door,即使他什么都不做,Door的方法它也都继承下来了
pass
 
 
u = Unlockable(1,'open')
print (u.status)
 
l = Lockable(1,'open',True)
l.open()
print (l.status)
 
l = Lockable(1,'open',False)
l.open()
print (l.status)
 
 
 
===========================================================================
===========================================================================
===========================================================================
静态方法:
 
@static_method #静态方法,类的工具包
def info() #不用加self,无需实例化,不能访问实例其他信息
 
 
@class_method #类方法,
def info(self): #能访问类变量,不能访问实例变量,不需要实例化,即可调用
 
 
@property #将函数变成静态属性,需实例化方可调用,如果不实例化则仅仅是打印内存地址,调用的时候不需要加()
def sayhi(self): #
print "-----say hi",self.name
return "test"
 
 
m = MyClass()
print (m.sayhi) #会打印出-----say hi
 
如果是这样:
print (MyClass.sayhi) #则仅仅只会打印出<property object at 0x0200F8A0>
 
如果是这样:
print (MyClass.sayhi()) #则会报错
 
 
 
=========================================================================
=========================================================================
=========================================================================
什么情况需要实例化才能调用,什么情况不需要实例化也能调用:
总结:
你只要看到有self的就代表需要实例化才能调用(仅仅在没有那三个特殊方法的情况下)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

おすすめ

転載: www.cnblogs.com/steven9898/p/11329433.html