zoukankan      html  css  js  c++  java
  • 萌新向Python数据分析及数据挖掘 第一章 Python基础 第九节 类

     

    第一章 Python基础

    第九节 类

    面向对象编程时,都会遇到一个概念,,python也有这个概念,下面我们通过代码来深入了解下。

    其实类 和函数都是为了节省代码,有了类的的概念,就可以把相同的代码写在父类,子类继承后就可以直接使用,而且通过选择对应的父类就可以直接使用对应父类的内容。

    创建和使用类

     1 class Dog(): #认识狗这类东西
     2     def __init__(self, name, age): #狗是肯定有名字和年龄的,是个狗就有,要用户填写
     3         self.name = name #拿下来存着
     4         self.age = age #拿下来存着
     5     def sit(self):
     6         print(self.name.title() + " is now sitting.")# 培训可以让狗坐下
     7     def roll_over(self):
     8         print(self.name.title() + " rolled over!")# 培训可以让狗翻滚
     9  
    10 my_dog = Dog('willie', 6) #买了一个狗,起好名字
    11 print("My dog's name is " + my_dog.name.title() + ".") #我看看我的狗叫什么名字
    12 print("My dog is " + str(my_dog.age) + " years old.")#我看看我的狗几岁了
    View Code
    
    

    class关键字:来定义一个类。类名通常首字母为大写。

    __init__方法:特殊方法,每当实例类的时候都会运行。其中的形参self必不可少,而且必须位于最前面。

    self形参:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候用不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身。

    实例的方法是指定类名以及需要传入的实参。

    要访问实例的属性或者调用方法,可使用句点表示法

    使用类和实例

     1 class Car():#定义一个车子类
     2     def __init__(self, make, model, year): #车子类都得有牌子、型号、制造年份
     3         self.make = make#把用户输入的信息存为车子的属性
     4         self.model = model
     5         self.year = year
     6         self.odometer_reading = 0 #<- here 建立一个新的属性“里程表”,不用用户输入,默认为0
     7  
     8     def get_descriptive_name(self): # 建立一个函数(方法、外挂)来描述车子
     9         long_name = str(self.year) + ' ' + self.make + ' ' + self.model
    10         return long_name.title()
    11  
    12     def read_odometer(self): # 建立一个函数(方法、外挂)来描述打印车子的里程表
    13         print("This car has " + str(self.odometer_reading) + " miles on it.")
    14 "到此就写了一套方法来对付车这一类东西"
    15 my_new_car = Car('audi', 'a4', 2016)#买新车啦
    16 print(my_new_car.get_descriptive_name()) #我来看看我的新车的信息
    17 my_new_car.read_odometer()#我来看看我的新车的里程表
    View Code
    
    

    可以看到,我们给Car类的属性指定了默认值self.odometer_reading = 0。如果要修改它,我们可以通过实例直接访问它并修改,比如:my_new_car.odometer_reading = 23。或者通过方法修改属性的值。或者通过方法对属性的值进行递增。

    class Car():
        --snip--
        #通过方法修改属性的值
       
    
    

    继承

    一个类继承另一个类时,他将自动获得另一个类的所有属性和方法;原有的类称为父类,新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

    现在我们有一个Car类如下

    
    

    创建子类实例时,python首先给父类所有属性赋值。

    接下来我们创建新类EleCar

    class Car():
        --snip--
     
    
    

    首先父类必须位于子类前面。

    super()是一个特殊函数,将父类和子类关联起来。使得可调用子类的父类的方法__init__(),让子类包父类的所有属性。

    给子类定义属性和方法没有任何限制,比如:

    class Car():
        --snip--
     

    
    
     
     1 class ElectricCar(Car):#电车和一般的车还是有区别的,要写清楚电车的特有的情况怎么对付
     2     def __init__(self, make, model, year):
     3         super().__init__(make, model, year)
     4         self.battery_size = 70 #电车有电池啊 默认70
     5  
     6     def describe_battery(self): #电车可以看看我的电池多大
     7         print("This car has a " + str(self.battery_size) + "-kWh battery.")
     8  
     9 my_tesla = ElectricCar('tesla', 'model s', 2016) #买新电车了 
    10 print(my_tesla.get_descriptive_name()) #我看看我的新电车的信息
    11 my_tesla.describe_battery()# 我看看我新电车的电池信息
    View Code

    如果需要重写父类的方法,只需定义一个与重写的父类方法同名的方法即可。

    python还可以使用其他类的实例作为自己类的属性。

    导入类

    类似函数,类也可以保存为.py文件形成模块从而进行导入。

    导入单个类: from model_name import class_name

    导入一个模块的多个类: from model_name import class_name1, class_name2

    导入一个模块所有类: from model_name import *

    导入整个模块: import model_name

    还可以在一个模块中导入另一个模块

    python标准库

    其是一组模块。模块collections中有一个类OrderedDict。字典的键值对没有顺序,但是这个类几乎和字典相同,区别只在于记录了键值对的顺序。

     1 from collections import OrderedDict 
     2  
     3 favorite_languages = OrderedDict() #除了标签 还有顺序的字典,列表和字典特点的集合
     4  
     5 favorite_languages['jen'] = 'python'
     6 favorite_languages['sarah'] = 'c'
     7 favorite_languages['edward'] = 'ruby'
     8 favorite_languages['phil'] = 'python'
     9  
    10 for name, language in favorite_languages.items(): #可以按顺序一个个抓出来打印
    11     print(name.title() + "'s favorite language is " +language.title() + ".")
    View Code
    
    
  • 相关阅读:
    Laravel-RestfulAPI 资源控制器(全面详解)
    Laravel 支付宝SDK在Laravel5的封装
    Laravel 集成 阿里大于 短信接口
    Laravel --进阶篇 (单用户登录)
    Laravel LTS 分割 路由文件的最佳方式
    Laravel -- 实战篇 自制二维码 Simple QrCode
    Laravel 使用 Aliyun OSS 云存储
    Laravel 富文本插件-Ueditor
    Laravel 实战篇
    Laravel 微信开发组件-WeChat 微信支付
  • 原文地址:https://www.cnblogs.com/romannista/p/10326298.html
Copyright © 2011-2022 走看看