Python 类

1、创建和使用类

  使用类几乎可以模拟任何东西。

1.1创建Dog类

  根据Dog类创建的每个实例都将存储名字和年龄。我们赋予了每条小狗蹲下sit()和打滚roll_over()的能力

#!/usr/bin/env 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() + "roll over!")

my_dog = Dog('white',18)

print("My dog name is " + my_dog.name.title() + ".")
print("My dog is " +str(my_dog.age) + " years old!")
my_dog.sit()
my_dog.roll_over()

================================================
My dog name is White.
My dog is 18 years old!
White is now sitting!
Whiteroll over!

1.2创建多个实例

#!/usr/bin/env 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() + "roll over!")

my_dog = Dog('white',18)
your_dog = Dog('black',19)


my_dog.sit()
my_dog.roll_over()
your_dog.sit()
your_dog.roll_over()

==============================================
White is now sitting!
Whiteroll over!
Black is now sitting!
Blackroll over!

2、使用类和实例

①Car类

#!/usr/bin/env python

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()

my_new_car = Car('audi','a4',2017)
print(my_new_car.get_descriptive_name())

===============================================
2017 Audi A4

②给属性指定默认值

#!/usr/bin/env python

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """打印一条指出汽车里程的信息"""
        print("This car has " +str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi','a4',2017)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()

============================================
2017 Audi A4
This car has 0 miles on it.

③修改属性的值

  可以以三种不同的方式修改属性的值:直接通过实例进行修改;通过方法进行设置;通过方法进行递增(增加特定的值)

  • 直接修改属性的值
#!/usr/bin/env python

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 23

    def get_descriptive_name(self):
        """返回整洁的描述信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """打印一条指出汽车里程的信息"""
        print("This car has " +str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi','a4',2017)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()

===============================================
2017 Audi A4
This car has 23 miles on it.
  • 通过方法修改属性的值
#!/usr/bin/env python

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """打印一条指出汽车里程的信息"""
        print("This car has " +str(self.odometer_reading) + " miles on it.")

    def update_odometer(self,mileage):
        """将里程表读数设置为指定的值"""
        self.odometer_reading = mileage

my_new_car = Car('audi','a4',2017)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(23)
my_new_car.read_odometer()

==============================================
2017 Audi A4
This car has 23 miles on it.

    对Car类所做的唯一修改是添加了方法update_odometer()。这个方法接受一个里程值,并将其存储到self.odometer_reading中。

3、继承

  编写类时,并非总是从空白开始。如果你要编写的类时另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

#!/usr/bin/env python

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """打印一条指出汽车里程的信息"""
        print("This car has " +str(self.odometer_reading) + " miles on it.")

    def update_odometer(self,mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You cant roll back an odometer!")

    def increment_odometer(self,miles):
        self.odometer_reading += miles

class ElectricCar(Car):
    """电动车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父辈的属性"""
        super().__init__(make,model,year)

my_tesla = ElectricCar('tesla','model s',2017)
print(my_tesla.get_descriptive_name())

==========================================
2017 Tesla Model S

4、导入类

#!/usr/bin/env python

from car import Car

my_new_car = Car('audi','a4',2017)
print(my_new_car.get_descriptive_name())

my_new_car.odometer_reading = 23
my_new_car.read_odometer()


=======================================
2017 Audi A4
This car has 23 miles on it.

从一个模块中导入多个类:

from car import Car,ElectricCar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒网络空间安全讲武堂

赛前福利②最新2018HITB国际赛writeup

FIRST 距离“西湖论剑杯”全国大学生网络空间安全技能大赛只有9天啦! 要拿大奖、赢offer,那必须得来点赛前练习定定心啊~这不,讲武堂就拿到了2018HI...

3324
来自专栏从流域到海域

《笨办法学Python》 第1课手记

《笨办法学Python》第1课手记 在powershell中打开Python输入如下代码: print "Hello World!" print "Hello...

2147
来自专栏程序员互动联盟

[WebKit] JavaScriptCore解析--基础篇(一)字节码的生成及抽象语法树的构建详情分析

看到HorkeyChen写的文章《[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现》,写的很好,深...

50010
来自专栏极客猴

Django 学习笔记之模型(下)

上篇文章讲解了 Django 如何创建模型,本文将继续讲解如何对模型进行增删改查操作。

1123
来自专栏非典型技术宅

Swift多线程之Operation:异步加载CollectionView图片1. Operation 设置依赖关系2. 前置知识点内容3. CollectionView中图片进行异步加载

1997
来自专栏菜鸟前端工程师

JavaScript学习笔记025-闭包0缓存计算0console属性

1083
来自专栏北京马哥教育

shell十三问,为linux学习打基础(二)

本文整理并转自CU上的帖子[学习共享] shell 十三問?,此贴是2003年发表的,但却是相当不错的linux基础知识汇集贴,原帖主使用的台湾风格,本文加以简...

3974
来自专栏linux驱动个人学习

设计模式

一、设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面...

2975
来自专栏岑玉海

Spark源码系列(六)Shuffle的过程解析

Spark大会上,所有的演讲嘉宾都认为shuffle是最影响性能的地方,但是又无可奈何。之前去百度面试hadoop的时候,也被问到了这个问题,直接回答了不知道。...

4326
来自专栏LanceToBigData

Hadoop(十二)MapReduce概述

前言   前面以前把关于HDFS集群的所有知识给讲解完了,接下来给大家分享的是MapReduce这个Hadoop的并行计算框架。 一、背景 1)爆炸性增长的We...

2377

扫码关注云+社区

领取腾讯云代金券