python学习笔记(2)

python学习日记(2)

类操作

一.创建和使用类

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('whillie', 6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog is " + str(my_dog.age) + " year.old.")
my_dog.roll_over()
my_dog.sit()

(1) python3.0的版本类的创建可以不在括号中添加object,三个引号为文档字符串,可以用来注释文档,至于类的调用,要根据实例化时括号中的实参来具体调用。类中的方法括号里的self是必须要添加的,方法中是通过用self来调用形参的。ps:若代码中的形参和实例中的参数名相重,那实例中的参数优先级更高。

二.使用类和实例

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("The 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 can't roll back an odometer!")
        self.odometer_reading = mileage

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

my_new_car.odometer_reading = 23
my_new_car.read_odometer()

my_new_car.update_odometer(23)
my_new_car.read_odometer()

(2)类似Java的构造函数;给属性赋值(通过方法赋值或者是直接赋值)

三.继承

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("The 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 can't roll back an odometer!")
        self.odometer_reading = mileage

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 battery.")
    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size == 70:
            range = 240
        elif self.battery_size == 85:
            range = 270

        message = "This car can go approximately "+ str(range)
        message += "miles on a full charge."
        print(message)

class ElectricCar(Car):#调用子父类的函数
    """ 电动汽车的独特之处"""

    def __init__(self, make, model, year):
        """初始化父类属性"""
        super().__init__(make,model,year)
        self.battery = Battery()        

my_tesla = ElectricCar('tesla',' model s',2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

(3)继承
 子类继承父类的所有方法和属性,和Java相似。
 和python2.0+的不同是super()括号内的不需要写子类的名字。
 关于方法的重写,方法名要相同。

四.导入类

from car import Car #打开car类导入其中car类
import Car #直接导入整个模块
from car import * #导入这个模块里所有类

(4)导入模板
ps:模板直接也可以互相导入,可以使一个模板不那么臃肿。



对于书本进行的小小总结,仅限于学习使用。

posted @ 2018-04-04 19:57  Jkevin5  阅读(85)  评论(0)    收藏  举报