Python-类(书籍内容整理)
【创建和使用类属性和方法】
类的定义:根据约定,在python中,首字母大写的名称指的是类,如:My_Dog;定义的类中的括号内容如果是空的,因为是要从空白创建这个
创建实例:一般小写的名称如:my_dog,指根据类创建的实例
类的命名规范:采用驼峰命名方法,即将类名中的每个单词的首字母都大写,且不使用下划线
实例名and模块名命名规范:实例名和模块名都采用小写格式,并在单词之间加上下划线
文档字符串:对于每个类,都应紧跟在类定义后面包含一个文档字符串,作用是描述类的作用是什么;同理,每个模块首行也应该包含一个文档字符串,对其中的类是做什么的做一个描述
关于空行:类中-----利用一个空行来间隔方法
再模块中-----使用两个空行来间隔类
同时需要导入标准库的模块和自己的模块------先编写导入标准库模块的import语句,再添加一个空行导入自己的模块
关于类中的函数:def定义的都为函数,但是如果是在类中,那么类中的函数就为方法!方法!!方法!!!
以Self为前缀的的变量:以Self为前缀的的变量都可供类中的所有方法使用
根据类创建实例:可将类作为如何创建实例的说明,如下代码:Dog类是一系列说明,让python知道如何创建表示特定小狗的实例
class Dog(): # 定义类:首字母大写 '''一次模拟小狗的简单尝试''' #文档字符串:对这个类的功能做了描述 def __init__(self,name,age): '''初始化属性的name和age''' self.name = name self.age = age def sit(self): '''模拟小狗被命令时蹲下''' print(self.name.title() + " is now sitting.") def roll_over(self): '''模拟小狗被命令时打滚''' print(self.name.title() + " rolled over!") my_dog = Dog("xiaobai",3) # 这就是创建实例 我理解的是把类中定义的方法统一给了一个变量接收,然后可以进行实例的属性访问 # 下面是访问属性的值,也就是访问定义的init方法里面的属性 print("My dog name is: "+my_dog.name.title()+".") #my_dog.name------>使用句点表示法进行访问实例子的属性 print("My dog is: "+str(my_dog.age)+"years old") #my_dog.age------->访问实例的age属性 # 下面是调用方法;上面的Dog类中定义了两个方法:sit和roll_over;一旦根据类创建了实例,就可以使用句点表示法进行调用类中的任何方法 # 下面我们调用方法让小狗蹲下和打滚 my_dog.sit() #输出:Xiaobai is now sitting. my_dog.roll_over() #输出:Xiaobai rolled over! # 要调用方法,指定实例的名称和要调用的方法并用句点分割即可,比如:遇到my_dog.sit()时,python在类Dog里面找方法sit,然后运行里面代码
操作根据类创建多个实例:
# 可根据根据需求根据类创建任意数量的实例 your_dog = Dog("小黑",5) print(your_dog.name) print(your_dog.age) your_dog.roll_over() your_dog.sit()
【根据类和实例进行属性值的修改】
class Car(): '''一次模拟汽车的简单尝试''' def __init__(self,make,model,year): #初始化定义属性:制造商,型号和生产年份 '''初始化描述汽车的属性''' self.make = make self.model = model self.year = year self.licheng = 0 def get_descriptive_name(self): '''返回整洁的描述性信息''' long_name = str(self.year) +" "+self.make+" "+self.model return long_name.title() def read_licheng(self): '''定打印一条读取汽车行驶里程的信息''' print("This car has "+str(self.licheng)+" miles on it!") def update_licheng(self,mileage): #第二种方法:定义一个方法:属性值赋予方法传入的实参,随后进行读取输出 ''' 将里程表读数作为指定的值 禁止将里程表读数往回调 ''' if mileage > self.licheng: self.licheng = mileage else: print("你不能回调修改里程数!") def dizeng_licheng(self,miles): #第三种方法:通过定义方法进行递增 '''进行里程数量的递增''' self.licheng += miles my_new_car = Car("中国一汽","红旗001",2005) print(my_new_car.get_descriptive_name()) my_new_car.read_licheng() # 【修改属性:汽车行驶里程的值】 # 第一种方法:通过实例直接修改 # 第二种方法:通过方法进行设置 # 第三种方法:通过方法进行递增(增加特定的值) # 1 通过实例直接进行修改 my_new_car.licheng = 100 #直接找到属性,对属性值进行修改,然后实例调用方法名,进行运行 my_new_car.read_licheng() #输出:This car has 100 miles on it! # 2 通过方法进行修改属性的值 my_new_car.update_licheng(200) my_new_car.read_licheng() # 3 通过方法进行递增:在方法里面定义递增,随后再传入递增的值即可 my_new_car.dizeng_licheng(100) my_new_car.read_licheng()
【继承】
继承的概念:编写类时,并不是每一个类都是从空白开始的,如果要编写的类是基于另一个现成的类的特殊版本,就可以使用继承了;一个类继承另一个类的时候,将会自动获得它的所有属性和方法;那么原有的类就被称为:父类,而新类被称为子类,子类既可以继承父类的所有的属性和方法,同时还可以定义自己的属性和方法
创建子类的要求:
1 创建子类时,父类必须包含在当前文件夹中,并且位于子类前面
2 定义子类时,必须在子类括号内指定父类的名称
关于重写父类的方法:
场景:假设子类B继承了父类,而父类当中有一个方法已经不适合于子类B了,那么子类可对其进行重写,写在子类方法里面,即与他要重写的父亲=类方法同名,这样,python就不会考虑父类的方法,而只关注你在子类中定义的相应的方法,即使两者同名
关于子类继承父类的代码如下:
class Car(): #这里是父类 '''一次模拟汽车的简单尝试''' def __init__(self,make,model,year): #初始化定义属性:制造商,型号和生产年份 '''初始化描述汽车的属性''' self.make = make self.model = model self.year = year self.licheng = 0 def get_descriptive_name(self): '''返回整洁的描述性信息''' long_name = str(self.year) +" "+self.make+" "+self.model return long_name.title() def read_licheng(self): '''定打印一条读取汽车行驶里程的信息''' print("This car has "+str(self.licheng)+" miles on it!") def update_licheng(self,mileage): #第二种方法:定义一个方法:属性值赋予方法传入的实参,随后进行读取输出 ''' 将里程表读数作为指定的值 禁止将里程表读数往回调 ''' if mileage > self.licheng: self.licheng = mileage else: print("你不能回调修改里程数!") def dizeng_licheng(self,miles): #第三种方法:通过定义方法进行递增 '''进行里程数量的递增''' self.licheng += miles # 下面定义一个子类,创建一个电动汽车,它包含汽车的基本属性,所以会继承上面类为父类 class DianDongCar(Car): '''电动汽车的特殊之处''' def __init__(self,make,model,year): '''初始化父类的属性''' super().__init__(make,model,year) self.dianping_size = 70 def dianping(self): #这就是定义了子类的方法 '''打印一条描述电瓶容量的消息''' print("This car has a "+str(self.dianping_size)+" -kwh battery.") diandongche = DianDongCar("日本","尼桑",1999) print(diandongche.get_descriptive_name()) diandongche.dianping() #子类实例进行调用自己的方法,完成方法内的功能;输出:This car has a 70 -kwh battery.