python基础(八)
'''
类
基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。
根据类来创建对象被称为实例化。
'''
#根据dog类创建的每个实例都将存储名字和年龄,赋予每条小狗蹲下和打滚的能力 sit() roll_over() 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!")
'''
实参self,python调用_init_方法来创建实例时,将自动传入实参self。
每个与类相关联的方法调用都自动传递实参self,它是指向实例本身的引用,让实例能够访问类中的属性和方法。
每当我们根据Dog类创建实例时,都只需给最后两个形参提供值。
self.name = name获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例。
这样可以通过实例访问的变量称为属性。
'''
#根据类创建实例 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('peter', 10) print("My dog's name is " + my_dog.name.title() + ".") print("My dog is " + str(my_dog.age) + " years old.")
My dog's name is Peter. My dog is 10 years old.
'''
1.访问属性
2.调用方法
3.创建多个实例
'''
my_dog.name
'peter'
my_dog.age
10
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('peter', 10) my_dog.sit() my_dog.roll_over()
Peter is now sitting. Peter rolled over!
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('peter', 10) your_dog = Dog('lucy', 6) print("My dog's name is " + my_dog.name.title() + ".") print("My dog is " + str(my_dog.age) + " years old.") my_dog.sit() my_dog.roll_over() print("\nYour dog's name is " + your_dog.name.title() + ".") print("Your dog is " + str(your_dog.age) + " years old.") your_dog.sit() your_dog.roll_over()
My dog's name is Peter. My dog is 10 years old. Peter is now sitting. Peter rolled over!
Your dog's name is Lucy. Your dog is 6 years old. Lucy is now sitting. Lucy rolled over!
#使用类和实例 修改实例的属性 #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', 2016) print(my_new_car.get_descriptive_name())
2016 Audi A4
#给属性指定默认值 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', 2016) print(my_new_car.get_descriptive_name()) my_new_car.read_odometer()
2016 Audi A4 This car has 0 miles on it.
#修改属性的值 #直接修改 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', 2016) print(my_new_car.get_descriptive_name()) my_new_car.odometer_reading = 23 my_new_car.read_odometer()
2016 Audi A4 This car has 23 miles on it.
#通过方法修改属性的值 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', 2016) print(my_new_car.get_descriptive_name()) my_new_car.update_odometer(23) my_new_car.read_odometer()
2016 Audi A4 This car has 23 miles on it.
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 can't roll back an odometer!")
#通过方法对属性的值进行递增 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 can't roll back an odometer!") def increment_odometer(self, miles): self.odometer_reading += miles my_used_car = Car('subaru', 'outback', 2013) print(my_used_car.get_descriptive_name()) my_used_car.update_odometer(23500) my_used_car.read_odometer() my_used_car.increment_odometer(100) my_used_car.read_odometer()
2013 Subaru Outback This car has 23500 miles on it. This car has 23600 miles on it.
'''
继承
使用情形:要编写的类是另一个现成类的特殊版本。
一个类继承另一个类时,将自动获得另一个类的所有属性和方法;
原有的类称为父类,新类称为子类;子类继承了父类的多有属性和方法,
同时还可以定义自己的属性和方法。
'''
#子类的方法__init()__ #父类汽车 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 can't roll back an odometer!") def increment_odometer(self, miles): self.odometer_reading += miles #子类电动汽车 class ElectricCar(Car): def __init__(self, make, model, year): #super()建立父类与子类之间的联系,调用父类的方法__init__(),让ElectricCar包含父类的所有属性,父类也称为超类。 super().__init__(make, model, year) my_tesla = ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())
2016 Tesla Model S
#给子类定义属性和方法 #子类电动汽车 class ElectricCar(Car): def __init__(self, make, model, year): #super()建立父类与子类之间的联系,调用父类的方法__init__(),让ElectricCar包含父类的所有属性,父类也称为超类。 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', 2016) print(my_tesla.get_descriptive_name()) my_tesla.describe_battery()
2016 Tesla Model S This car has a 70-KWh battery
#重写父类的方法
'''
父类中的方法,不符合子类模拟的实物的行为,都可以对其进行重写。
可在子类中定义一个与要重写的父类的方法同名的方法。
'''
#将实例用作属性 ''' 可以将大型类拆分成多个协同工作的小类 ''' 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") class ElectricCar(Car): def __init__(self, make, model, year): super().__init__(make, model, year) #创建一个新的Battery实例,并将该实例存储在属性self.battery中 self.battery = Battery() my_tesla = ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name()) my_tesla.battery.describe_battery()#注意这里!在my_tesla中查找属性battery,并对存储在该属性中的Battery实例调用方法describe_battery()
2016 Tesla Model S This car has a 70-KWh battery
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) + " miles on a full charge." print(message) class ElectricCar(Car): def __init__(self, make, model, year): super().__init__(make, model, year) #创建一个新的Battery实例,并将该实例存储在属性self.battery中 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()
2016 Tesla Model S This car has a 85-KWh battery This car can go approximately 270 miles on a full charge.
#导入类 将类存储在模块中,在主程序中导入所需的模块 #导入单个类 car.py 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 can't roll back an odometer!") def increment_odometer(self, miles): self.odometer_reading += miles
#my_car.py from car import Car#打开模块car,导入其中的Car类 my_new_car = Car('audi', 'a4', 2016) print(my_new_car.get_descriptive_name()) my_new_car.odometer_reading = 23 my_new_car.read_odometer()
2016 Audi A4
This car has 23 miles on it.
#在一个模块中存储多个类 car.py 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 can't roll back an odometer!") def increment_odometer(self, miles): self.odometer_reading += miles 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) + " 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_electric_car.py from car import ElectricCar my_tesla = ElectricCar('tesla', 'model s', 2016) my_tesla.battery.describe_battery() my_tesla.battery.get_range()
This car has a 85-KWh battery
This car can go approximately 270 miles on a full charge.
#从一个模块中导入多个类 #my_cars.py from car import Car, ElectricCar my_beetle = Car('volkswagen', 'beetle', 2016) print(my_beetle.get_descriptive_name()) my_tesla = ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())
2016 Volkswagen Beetle
2016 Tesla Model S
#导入整个模块 使用句点表示法访问需要的类 #my_cars.py import car my_beetle = car.Car('volkswagen', 'beetle', 2016) print(my_beetle.get_descriptive_name()) my_tesla = car.ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())
2016 Volkswagen Beetle
2016 Tesla Model S
#导入模块中的所有类 from module_name import*
#在一个模块中导入另一个模块 #electric_car.py from car import Car#将Car类导入该模块中 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) + " 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_car.py from car import Car from electric_car import ElectricCar my_beetle = Car('volkswagen', 'beetle', 2016) print(my_beetle.get_descriptive_name()) my_tesla = ElectricCar('tesla', 'model s', 2016) print(my_tesla.get_descriptive_name())
2016 Volkswagen Beetle
2016 Tesla Model S
#python标准库 ''' python标准库是一组模块,安装的python都包含。 OrderedDict 记录了键值对的添加顺序 ''' from collections import OrderedDict favorite_languages = OrderedDict() favorite_languages['jen'] = 'python' favorite_languages['sarah'] = 'c' favorite_languages['edward'] = 'ruby' favorite_languages['phil'] = 'python' for name, language in favorite_languages.items(): print(name.title() + "'s favorite language is " + language.title() + '.')
Jen's favorite language is Python. Sarah's favorite language is C. Edward's favorite language is Ruby. Phil's favorite language is Python.