1.类的创建
计算机编程的两种思维主要有两种:一种是面向过程的编程,一种是面向对象的编程。面向过程的思维是按问题解决的过程来编程的,程序比较简单,适用于功能比较单一的情况;而面向对象的思维更接近自然语言,编写比较复杂,但延展性比较强。
1.1 类的相关概念
类是指一个具体的类,比如比格犬,英国蓝猫,而实例是指类中某一个具体的对象,比如忠犬八公就是秋田犬这一个大类中的一个具体的对象;而对象是指类与实例的集合。
1.2 类在代码中的具体实现
可以对类进行具体的属性,以及方法:
class Chinese: eyes='black' def action(self): print('吃饭,用筷子') i_chinese=Chinese() #类的实例化 print(i_chinese.eyes) #输入类的属性 i_chinese.action() #实现类的方法
1.3 类的特殊方法
1.3.1 self方法
self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。
class Chinese: name = '吴枫' # 类属性name def say(self): #创建实例后,self中调入person print(self.name + '是中国人') person = Chinese() # 创建Chinese的实例person person.say() # 调用实例方法
1.3.2 初始化方法
初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
class Chinese: def __init__ (self): #固定属性的初始化方法 self.mouth = 1 # self.不能丢 self.eye = 2 def body(self): print('我有%s张嘴巴' % self.mouth) print('我有%s只眼睛' % self.eye) person = Chinese() person.body()
class Chinese: #不固定属性的初始化方法 def __init__(self, name, birth, region): self.name = name # self.name = '吴枫' self.birth = birth # self.birth = '广东' self.region = region # self.region = '深圳' def born(self): print(self.name + '出生在' + self.birth) def live(self): print(self.name + '居住在' + self.region) person = Chinese('吴枫','广东','深圳') # 传入初始化方法的参数,在创建类时就要传参 person.born() person.live()
2.类的继承与定制
2.1 类的继承
类的继承的代码为:class B(A) 即为B继承A,A为B的父类。具体代码如下所示:
# 先阅读代码,再运行代码。 class Chinese: eye = 'black' def eat(self): print('吃饭,选择用筷子。') class Cantonese(Chinese): #类的继承,继承Chinese的属性 pass # pass表示'跳过',不执行其他操作 yewen = Cantonese() print(yewen.eye) yewen.eat()
函数isinstance(),可以用来判断某个实例是否属于某个类。
# 阅读代码和注释,直接运行 print(isinstance(1,int)) # 判断1是否为整数类的实例 print(isinstance(1,str)) print(isinstance(1,(int,str))) # 判断实例是否属于元组里几个类中的一个
2.1.1 类的多重继承
一个类,可以同时继承多个类,语法为class A(B,C,D):。和子类更相关的父类会放在更左侧。所以当创建的实例调用属性和方法会优先级是从左到右。
class C0: name = 'C0' class C2(C0): num = 2 class C1: num = 1 class C3: name = 'C3' class C4(C1,C2,C3): pass ins = C4() print(ins.name) # 打印出C0 print(ins.num) # 打印出1
2.2 类的定制
子类也可以在继承的基础上进行个性化的定制,包括:
2.2.1 创建新属性、新方法
class Chinese: eye = 'black' def eat(self): print('吃饭,选择用筷子。') class Cantonese(Chinese): # 类的继承 native_place = 'guangdong' # 类的定制 def dialect(self): # 类的定制 print('我们会讲广东话。') yewen = Cantonese() print(yewen.eye) # 父类的属性能用 print(yewen.native_place) # 子类的定制属性也能用 yewen.eat() # 父类的方法能用 yewen.dialect() # 子类的定制方法也能用
2.2.2 修改继承到的属性或方法
2.2.2.1 直接对属性或者方法进行改写
class Chinese: def land_area(self,area): print('我们居住的地方,陆地面积是%d万平方公里左右。'% area) class Cantonese(Chinese): # 直接对方法进行重写 def land_area(self,area): print('我们居住的地方,陆地面积是%d万平方公里左右。'% int(area *0.0188))
2.2.2.2 间接对父类的属性或者方法进行改写
class Chinese: def land_area(self,area): print('我们居住的地方,陆地面积是%d万平方公里左右。'% area) class Cantonese(Chinese): # 间接对方法进行重写 def land_area(self, area, rate = 0.0188): Chinese.land_area(self, area * rate) # 直接继承父类方法,再调整参数。 gonger = Chinese() yewen = Cantonese() gonger.land_area(960) yewen.land_area(960)