美文网首页
Python3:类

Python3:类

作者: ACphart | 来源:发表于2018-07-16 16:43 被阅读14次

创建和使用类

class ClassName():
    def _init_(self, arg):
        self.arg = arg
    def func_name(self):
        pass

my_obj = ClassName(arg)
print(my_obj.arg)
my_obj.func_name()
  • _init_() 为构造函数(方法),每次创建实例时会自动调用。
  • self形参必不可少,且必须位于其他形参前面,它是一个指向实例本身的引用。
  • 使用句点表示法访问实例的属性和调用方法。

使用类和实例

  • 属性可以设置默认值,如果设置了默认值,就无需相应的形参。
class ClassName():
    def _init_(self, arg1):
        self.arg1 = arg1
        self.arg2 = 0
  • 修改属性的值有三种:直接通过实例修改,通过方法设置,通过方法增加特定的值。

继承

子类的_init_()

class Car():
    """docstring for Car"""
    def __init__(self, make,model,year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_randing = 0

    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + ' ' +self.model
        return long_name.title()
        def fill_gas_tank():
                print("gas tank is full.")

class E_Car(Car):
    """docstring for E_Car"""
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery_size = 70

    def describe_battery(self):
        print("This car has a " + str(self.battery_size) + "-kWh battery.")
        def fill_gas_tank():
                print("This car doesn't have a gas tank.")

my_tesla = E_Car('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
  • 创建子类时,父类必须包含在当前文件中,且位于子类前面。
  • 定义子类时,必须在括号内指定父类的名称,如下:
class ClassName(Parent_Class):
  • super()函数用于将父类和子类关联起来,并且调用父类的方法_init_()。
  • 让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法,如battery_size和describe_battery()。
  • 对于父类的方法,只要它不符合子类的特性,都可以进行重写,如fill_gas_tank()。

将实例用作属性

class Car():
    --snip--
class Battery():
    def _init_(self, battery_size=70):
        self.battery_size = battery_size
     def describe_battery(self):
        print("battery.")

class E_Car(Car):
    def _init_(self, make, model, year):
        super()._init_(make, model, year)
        self.battery = Battery()

my_tesla = E_Car('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
  • 在上面代码中定义了一个Battery的新类,在E_Car类中我们定义了一个self.battery的属性,同时创建一个新的Battery实例,并将实例存储在此属性中。
  • 调用实例属性的方式为my_obj.attr_name.func_name()

导入类

  • 为了让文件尽可能简洁,可以将类存储在模块中,然后在主程序中导入所需的模块。如:将下列代码存储在car.py文件中
class Car():
    --snip--
class Battery():
    --snip--
class E_Car(Car):
    --snip--
  • 然后创建另一个文件 my_car.py,在其中导入Car类
from car import Car, Battery
from car import E_Car

my_new_car = Car('audi', 'a4', 2016)
--snip--
my_e_car = E_Car('tesla', 'model s', 2016)
--snip--
  • 也可以导入整个模块
import car

my_e_car = car.E_Car('tesla', 'model s', 2016)
--snip--
  • 导入模块中的所有类
from car import *

my_e_car = E_Car('tesla', 'model s', 2016)
--snip--

在一个模块中导入另一个模块

  • 有时候,需要将类分散到多个模块中,并且模块间相互依赖,这种情况下可以在前一个模块中导入另一个模块,
  • 如下,将Car存在car.py中,Battery和E_Car存在e_car.py中,e_car.py需要从car.py中导入Car类
# car.py
class Car():
    --snip--
# e_car.py
from car import Car
class Battery():
    --snip--
class E_Car(Car):
    --snip--
  • 现在可以分别从各个模块中导入类,创建任何类型的汽车了,如下
from car import Car
from e_car import E_Car

my_car = Car(......)
my_e_car = E_Car(......)
--snip--

相关文章

  • python2和python3的差别

    1、新式类和旧式类的差异,python3统一采用新式类,需要显式继承object类 2、python3中print...

  • Python3简明教程四

    这部分主要说明Python3的类、模块等。 来源:实验楼Python3简明教程 1. 类 定义类的语法 __ini...

  • python类继承(super多类继承)

    1. python2和python3中定义类的形式不同 python3中只有只有新式类 python2中有经典类和...

  • 二、面向对象

    1 类的基本使用 python3中写成class 类名会自动解析为新式类class 类名(object) 2 类中...

  • python super用法 2018-01-28

    新式类,经典类 python3之后均称为新式类,默认继承object类 Python2.x版本分为:分新式类与经典...

  • Python新式类的方法解析顺序MRO与Super

    新式类与经典类的方法解析顺序 MOR(方法解析顺序) 经典类:深度优先 DFS python3以前 新式类:广度优...

  • 类的继承顺序

    python2新式类继承object的类python2经典类未继承任何类的python2新式类和python3的继...

  • Python3:类

    创建和使用类 _init_() 为构造函数(方法),每次创建实例时会自动调用。 self形参必不可少,且必须位于其...

  • python笔记(九)类

    python3 中所有类都是继承自 object,包括 type。type 是所有类对象的模版,比如 isinst...

  • 2018-10-08 Python21 异常、time模块

    异常处理-基本功能: Python3用元祖接收多个异常,Python2不用写圆括号。Python3用基类捕获所有异...

网友评论

      本文标题:Python3:类

      本文链接:https://www.haomeiwen.com/subject/uehbpftx.html