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.

 

posted on 2019-07-10 16:34  郭等等  阅读(402)  评论(0编辑  收藏  举报

导航