上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
class Washer:
company = 'ZBL'
def __init__( self ,water = 10 ,scour = 2 ):
self ._water = water #不想让用户直接访问实例变量,可以标志成私有
self .scour = scour
self .year = 2000 #这是生产日期
#属性包装,将water属性包装成方法,用户使用water时实际是访问的方法
@staticmethod #定义一个静态方法
def spins_ml(spins):
return spins * 0.4
print ( 'company:' ,Washer.company)
#print('year:',self.year)#错误,静态方法不能使用实例属性
@classmethod
def get_washer( cls ,water,scour): #cls相当于实例方法中的self,调用是不用提供这个参数
return cls (water, cls .spins_ml(scour)) #cls代表类名Washer,故不是硬编码(改类名是不用改cls,若cls用类名代替也对,但若改类名这个地方也需要改动)
@property
def water1( self ): #如果用户使用 实例.water相当于访问这个方法,而不是真的访问属性
return self ._water
@water1 .setter
def water1( self ,water):
if 0 <water< = 500 :
self ._water = water
else :
print ( 'set Failure!' )
@property
def total_year( self ):
return 2017 - self .year
def set_water( self ,water):
self .water = water
def set_scour( self ,scour):
self .scour = scour
def add_water( self ):
print ( 'Add water:' , self ._water)
def add_scour( self ):
print ( 'Add scour:' , self .scour)
def start_wash( self ):
self .add_water()
self .add_scour()
print ( 'Start wash...' )
class WasherDry(Washer): # 建立一个新类,继承自Washer
def dry( self ): #新类中可以定义只属于子类的新方法
print ( 'Dry cloths...' )
def start_wash( self ): #在子类中新定义与父类同名的方法就是方法的重载
self .add_scour()
self .add_water()
if __name__ = = '__main__' :
## print(Washer.spins_ml (8))
## w=Washer()
## print(w.spins_ml(8))
## w=Washer(200,Washer.spins_ml(8))
## w.start_wash()
w = WasherDry()
w.start_wash()
print (w.scour,w.company)
w.dry()
|
以上这篇python面向对象_详谈类的继承与方法的重载就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。