面向对象程序设计
1)类中创建__init__()方法
①创建类的新实例时,会自动执行该方法
②__init__()方法必须包含且第一个为self的参数,可以有多个参数
- __inti__(self)一个参数
1 class Geese(): 2 "大雁类" 3 def __init__(self): #构造方法,第一个参数必须有且为self参数,否则会报错 4 print("我是大雁类!")
1 #自动执行构造方法 2 wildGoose = Geese()

- __init__(self)多个参数
1 class Geese: 2 "大雁类" 3 def __init__(self,beak,wing,claw): 4 print("我是大雁类,我有以下特征") 5 print(beak) 6 print(wing) 7 print(claw)
1 beak1 = "特征1" 2 wing1="特征2" 3 claw1 ="特征3" 4 wildGoose = Geese(beak1,wing1,claw1)

2)创建实例方法并访问
1 def functionName(self,parameterlist): 2 block
①functionName 方法名,一般用小写字母开头
②self 必要参数,表示类的实例
③parameterlist 用于指定self以为的参数
④ block 方法体,实现具体功能
- 创建fly()方法
1 #创建实例方法并访问 2 class Geese: 3 "大雁类" 4 def __init__(self,beak,wing,claw): 5 print("我是大雁类,我有以下特征") 6 print(beak) 7 print(wing) 8 print(claw) 9 def fly(self,state): 10 print(state)
1 # 调用方法 2 beak1 = "特征1" 3 wing1="特征2" 4 claw1 ="特征3" 5 wildGoose = Geese(beak1,wing1,claw1) 6 wildGoose.fly("我飞行了")

3)创建数据成员并访问
①数据成员是指在类中定义的变量,即属性,根据定义的位置不同,又可以分为类属性和实例属性。
②类属性可以通过类名或者实例名访问
- 创建类属性且访问
1 #创建类中属性 2 class Geese(): 3 "燕类" 4 neck = "脖子" #类属性 5 wing = "振翅频率高" 6 leg = "腿" 7 def __init__(self): 8 print("我属于燕类,我有以下特征") 9 print(Geese.neck) 10 print(Geese.wing) 11 print(Geese.leg) 12
1 print(geese.neck) #通过实例名访问类属性 2 print(Geese.neck) #通过类名访问类属性

- 动态的为类添加属性
1 Geese.beak = "动态添加类属性"
1 geese = Geese() 2 geese.beak

- 通过实例名称修改实例属性
1 class Geese(): 2 def __init__(self): 3 self.neck = "脖子" 4 print(self.neck)
1 geese = Geese()
1 geese.neck = '脖子没有天鹅的长'
1 geese.neck

4)访问限制
①_foo: 表示保护类型的成员,只允许类本身及子类进行访问
②不能使用"from module import *"语句导入
- 创建_neck_swan保护型属性
1 # _foo: 2 class Swan: 3 "天鹅类" 4 _neck_swan = "天鹅的脖子很长" 5 def __init__(self): 6 print("__init__()",Swan._neck_swan)
1 swan = Swan() 2 swan._neck_swan #保护属性可以通过实例名访问

③__fool 私有类型属性,只允许定义该方法的类本身进行访问
④不能通过类的实例进行访问,可以通过“类的实例._类名.__fool”方式访问
- 创建__neck_swan私有类型属性
1 # __foo: 2 class Swan: 3 "天鹅类" 4 __neck_swan = "天鹅的脖子很长" 5 def __init__(self): 6 print("__init__()",Swan.__neck_swan)
1 swan = Swan() 2 swan._Swan__neck_swan

5)属性
①通过@property(装饰器)将一个方法转换为属性
②@property转换后的属性不能重新复制,否则会报错
1 @property 2 def methodname(self): 3 block
- 创建area属性
1 class Rect: 2 def __init__(self,width,height): 3 self.width= width 4 self.height=height 5 @property #将方法转换为属性 6 def area(self): 7 return self.width*self.height
1 rect = Rect(12,12) #创建类的实例 2 print(rect.area) #输出属性值

6)为属性添加安全保护机制
①设置为私有属性__fool时,在类体外不能获取它的值
②设置为保护属性_fool时,可以读但不能修改属性
- 创建__show私有属性
1 class TVshow: 2 def __init__(self,show): 3 self.__show=show 4 @property 5 def show(self): 6 return self.__show
1 tvshow = TVshow("少年的你") 2 tvshow.show

修改私有属性时会出错

③通过属性不仅可以将属性设置为只读属性,而且可以为属性设置拦截器,即允许对属性进行修改,但修改时需要遵守一定的约束。
1 class TVshow: 2 list_film=['A','B','C'] 3 def __init__(self,show): 4 self.__show=show 5 @property 6 def show(self): 7 return self.__show 8 @show.setter #设置setter方法,让属性可以修改 9 def show(self,value): 10 if value in TVshow.list_film: 11 self.__show="你选择了%s"%value 12 else: 13 self.__show="你选择的不存在"
1 tvshow.show='f' 2 tvshow.show

1 tvshow.show='B' 2 tvshow.show

7)继承
1 class ClassName(baseclasslist): 2 """类的帮助信息""" #文档字符串 3 Statement #类体
- 创建水果基类及派生类。然后调用基类中的方法
1 class Fruit(): 2 color="绿色" 3 def havest(self,color): 4 print("水果是%s的"%self.color) 5 print("水果已经收获") 6 print("水果原来是%s的"%Fruit.color) 7 8 class Apple(Fruit): 9 color = '红色' 10 def __init__(self): 11 print("我是苹果") 12 class Orange(Fruit): 13 color = '橙色' 14 def __init__(self): 15 print("\n我是橘子")
1 apple = Apple() 2 apple.havest(apple.color)

1 orange=Orange() 2 orange.havest(orange.color)

8)方法重写
①当基类中的方法无法满足需求时,可以在派生类中重新定义方法以满足使用
- 重写橘子类中的方法
1 class Fruit(): 2 color="绿色" 3 def havest(self,color): 4 print("水果是%s的"%self.color) 5 print("水果已经收获") 6 print("水果原来是%s的"%Fruit.color) 7 8 class Orange(Fruit): 9 color="橙色" 10 def __init__(self): 11 print("\n我是橘子") 12 def havest(self,color): 13 print("橘子是%s的"%color) 14 print("橘子已经获得了") 15 print("橘子原来是%s"%Fruit.color) 16 17 orang = Orange() 18 orang.havest(Orange.color)

9)派生类中调用基类__init__()的方法
- 在派生类中定义__init__()方法时,不会自动调用基类的__init__()方法
1 class Fruit(): 2 def __init__(slef,color): 3 print("elf.color)") 4 Fruit.color = color 5 def havest(self): 6 print("水果原来是%s的"%Fruit.color) 7 8 class Apple(Fruit): 9 def __init__(self): 10 print("我是苹果") 11 12 apple = Apple() 13 apple.havest()

- 添加super函数调用基类的__init__()方法
1 class Fruit(): 2 def __init__(slef,color): 3 print("elf.color)") 4 Fruit.color = color 5 def havest(self): 6 print("水果原来是%s的"%Fruit.color) 7 8 9 class Apple(Fruit): 10 color = '红色' 11 def __init__(self): 12 print("我是苹果") 13 super().__init__(Apple.color) #添加super调用基类__init__() 14 15 16 apple = Apple() 17 apple.havest()

浙公网安备 33010602011771号