class——python编程从入门到实践

创建和使用类

1. 创建Dog类


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!")


        编程趣事:上边的代码敲完之后,想试一下能不能用,就添加了一个实例运行了一下,结果一直报错:takes no arguments,检查和比较了好几遍,都一样呀,哪里的问题呢?结果把 init 敲成了 int ,但是在PyCharm和IDLE都显示正常,太神奇啦!

        言归正传:Python中首字母大写的名称指的是类;类中的函数成为方法;__init__(self, )是默认方法;默认方法中形参self必须存在且位于最前边,但创建实列时不需要提供值;以self为前缀的变量都可供类中的所有方法使用,还可通过实例访问。

2. 根据类创建实例


my_dog = Dog('willie', 6)    # 类实例,实例名称用小写
your_dog = Dog('lucy', 3)    # 再创建一个实例

print("My dog's name is " + my_dog.name.title() + ".")    # 用点句法访问属性
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()    # 调用方法

print("\nYour dog's name is " + your_dog.name.title() + ".")    # 用点句法访问属性
print("Your dog is " + str(your_dog.age) + " years old.")
my_dog.roll_over()    # 调用方法


使用类和实例

1. Car类


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', '2019')    # 创建实例
print(my_new_car.get_descriptive_name())    # 调用类的方法


2. 给属性指定默认值


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', '2019')
print(my_new_car.get_descriptive_name()) 
my_new_car.read_odometer()    # 访问类方法


3. 修改属性的值


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

    def increment_odometer(self, miles):
        """将里程读数增加指定量"""
        self.odometer_reading = self.odometer_reading + miles


my_new_car = Car('audi', 'a4', '2019')
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(66)    # 通过方法修改属性
my_new_car.read_odometer()

my_new_car.increment_odometer(100)    # 通过方法对属性的值递增
my_new_car.read_odometer()


继承

        要编写的类时另一个现成类的特殊版本,就使用继承。一个类继承另一个类时,它将自动获得另一个类的属性和方法;原有的类称为父类,而新的类称为子类。子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。

1. 子类的方法__init__( )


class ElectricCar(Car):    # 创建子类,括号中包含父类的名称
    """电动汽车的独特之处"""

    def __init__(self, make, model, year):    # 接受创建Car实例所需的信息
        """初始化父类的属性"""
        super().__init__(make, model, year)    # 将子类和父类关联起来,让子类包含父类所有属性。由此父类也称为超类(superclass)


my_tesla = ElectricCar('tesla', 'model s', 2019)    # 创建一个实例存储于变量中
print(my_tesla.get_descriptive_name())


 Note: 创建子类时,父类必须包含再当前文件中,且位于子类前边。

2. 给子类定义属性和方法


class ElectricCar(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.")


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


3. 重写父类的方法

在子类中定义一个与父类中方法同名的方法——重写父类的方法。

4. 将实例用作属性


class Battery:    # 定义新类
    """一次模拟电动汽车电瓶的简单尝试"""

    def __init__(self, battery_size=85):
        """初始化电瓶属性"""
        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 = 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()    # 创建一个新的Battery实例,并将该实例存储在属性中


my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()    # 在实例my_tesla中查找属性battery,并对存储在该属性中的Battery实例调用方法describe_battery()
my_tesla.battery.get_range()    # 继续通过属性中的实例调用方法


导入类

 














出处:https://www.cnblogs.com/shirley-yang/p/11106661.html

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论