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)