zoukankan      html  css  js  c++  java
  • python基础---类的相关概念及操作

    一、类的基本概念

    class Dog():
        def __init__(self,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('willie',6)  #创建实例,在这里我们一般用命名约定:通常认为首字母大写的名称(比如这里的Dog)指的是类,而小写的名称(比如my_dog)指的是类创建的实例
    my_dog.sit()  #通过实例调用Dog中的sit()方法
    my_dog.roll_over()  #通过实例调用Dog中的roll_over()方法

    1.在Python中,首字母大写的名称指的是类。

    2.方法__init__()

      类中的函数称作方法。

      __init__()是一个特殊的方法,每当根据类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。

      在上面的例子中,我们将__init__()方法定义成了包含三个形参:self、name和age。在这个方法的定义中,形参self必不可少,还必须位于其他形参前面。

      为何在方法定义中包含形参self 呢。因为Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self 。每个与类相关联的方法调用都会自动传递参数self ,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

      我们创建Dog实例时,Python将调用Dog类的方法__init__()。我们将通过实参向Dog()传递名字和年龄;self 会自动传递。

    3.类中的每个属性都必须有默认值,哪怕这个值是0或者空字符串。

    二、继承

    1.子类的方法__init__

    class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
    self.make=make
    self.model=model
    self.year=year
    def get_descriptive_name(self):
    """返回整洁的描述性信息"""
    long_name=str(self.year)+' '+self.make+' '+self.model
    return long_name.title()
    """定义电动汽车继承汽车类"""
    class ElectriCar(Car):
    def __init__(self,make,model,year):
    """初始化父类的属性"""
    super().__init__(make,model,year)
    my_tesla=ElectriCar('tesla','models',2016)
    """调用父类的方法"""
    print(my_tesla.get_descriptive_name())

      (1)创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。

      (2)创建子类时,父类必须包含在当前文件中,且位于子类前面。如上代码,我们定义了子类ElectriCar。定义子类时,必须在括号内指定父类的名称。

      (3)super()是一个特殊的函数,帮助Python将父类和子类关联起来。这行代码让Python调用ElectriCar的父类的方法__init__(),让ElectriCar实例包含父类的所有属性。父类也成为超类(superclass),名称super因此而得名。

    2.重写父类的方法

      对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义这样一个方法,即它要与重写的父类方法同名。这样,Python将不会考虑这个父类方法,而只关注你在子类中定义的相应方法。

    3.将实例用作属性

      使用代码模拟实物时,你可能会发现自己给类添加的细节越来越多:属性和方法的清单以及文件都越来越长。在这种情况下,可能需要将类的一部分作为一个独立的类提取出来。

      例如,不断给ElectriCar 类添加细节时,我们可能会发现其中包含很多专门针对汽车电瓶的属性和方法。在这种情况下,我们可将和谐属性和方法提取出来,放到另一个名为Battery的类中,并将Battery实例用作ElectriCar类的一个属性:

    class Battery():
    def __init__(self,battery_size=70):
    self.battery_size=battery_size
    def describe_battery(self):
    """打印出一条电瓶容量的消息"""
    print("This Car has a"+str(self.battery_size)+"-kwh batery.")
    接着在ElectriCar类中定义一个Battery实例属性,并可以直接用ElectriCar的实例调用Battery中的describe_battery()方法。
    def __init__(self,make,model,year):
    """初始化父类的属性"""
    super().__init__(make,model,year)
    self.battery=Battery()
    my_tesla.battery.describe_battery()

    4.导入类

      (1)从某个.py文件导入某个类,比如从car.py导入Car类,可以写成from car  import Car 

      (2)从某个模块导入多个类,用逗号分分隔各个类。;例如:from car import Car,ElectricCar

      (3)导入整个模块,import car

      (4)导入模块中的所有类,from car import *

    5.python标准库

      Python标准库是一组模块,安装的Python都包含它。我们可使用标准库中的任何函数和类,只需要在程序的开头包含一I条简单的import语句。下面来看一个collections中的OrderedDict类。OrderedDict实例的行为几乎与字典相同,区别只在于记录了键值对的添加顺序。

    from collections import OrderedDict

    favorite_language=OrderedDict()
    favorite_language['jen']='python'
    favorite_language['sarah']='java'
    favorite_language['edward']='php'
    favorite_language['phil']='c'
    for name,cname in favorite_language.items():
    print(name.title()+' favorite language is '+ cname )
  • 相关阅读:
    Resin4 自定义端口
    设备系统识别,解决方案。
    Reactjs-JQuery-Vuejs-Extjs-Angularjs对比
    HTML页面的加载
    传输层协议TCP和UDP
    常用的14种HTTP状态码速查手册
    前端总结·基础篇·CSS(二)视觉
    前端总结·基础篇·CSS(一)布局
    AngularJS 中的Promise --- $q服务详解
    ngRoute 和 ui.router 的使用方法和区别
  • 原文地址:https://www.cnblogs.com/RanWhoo/p/9453840.html
Copyright © 2011-2022 走看看