python学习之类

1、面向对象编程OOP,编写表现现实世界中的事物和情景的类,并基于这些类来创建对象,这个过程称为实例化`
#创建和使用类,使用类几乎可以模拟任何东西,以下创建表示小狗的类Dog(类用大写开头的字母表示),
#类表示是一大群,而不是个别定义好了类,就可以创建实例
class Dog(): #定义一个名为Dog类,括号是空的,因为我们要从空白创建这个类
‘’‘一次模拟小狗的简单尝试’’’

def __init__(self,name,age): #方法__init__(),类中的函数称为方法,与函数唯一的差别就是调用方式
    #__init__()是一个特殊的方法,每当你根据Dog创建新的实例时,python都会自动运行它。形参self必不可少,且位置在前,python在调用init
    #这个方法来创建是实例时,将自动传入实参self,不需要之指定。每个与类相关联的方法调用都会自动传入实参self,它是一个指向实例本身的
    #引用,让实例能够访问类中的属性和方法,每当我们根据类Dog创建实例时,都只需要给他后面两个参数name和age
    '''初始化属性name和age'''
    self.name=name #定义了两个变量name和age self,以self为前缀的变量都可供类中所有方法使用
    #self.name=name获取存储在形参name中的值,并存在变量name中,然后该变量被关联到当前创建的实例。
    self.age=age  #这种可以通过实例访问的变量称为属性

def sit(self): 
    '''模拟小狗被命令时蹲下'''
    print(self.name.title()+" is noe sitting.")
    
def roll_over(self):
    '''模拟小狗被命令时打滚'''
    print(self.name+" roll_over!")`
#根据类创建实例
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+" rolled over!")
        
my_dog=Dog("willim",3)#,遇到这一行代码,python会自动调用类中的init方法,来创建一条willim,3岁的狗实例,存到变量my_dog中
you_dog=Dog("luck",5)
print("my dog's name is "+my_dog.name.title()+' .')#my_dog.name,访问属性
print("my dog's name is "+str(my_dog.age)+' years old .')
print("you dog's name is "+you_dog.name.title()+' .')#my_dog.name,访问属性
print("you dog's name is "+str(you_dog.age)+' years old .')
my_dog.sit()#调用方法
my_dog.roll_over()
you_dog.sit()#调用方法
you_dog.roll_over()

my dog’s name is Willim .
my dog’s name is 3 years old .
you dog’s name is Luck .
you dog’s name is 5 years old .
Willim is now sitting.
willim rolled over!
Luck is now sitting.
luck rolled over!

#以上学会了创建类和实例,接下来学习如何使用类和实例
#创建第一个汽车的类
class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #添加属性,指定默认值0,有默认值,所以形参中不用包含
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
my_car=Car("audi","A4",2016)
my_car.get_descriptive_name()
my_car.read_odometer()

2016 audi A4
this car has 0 mile on it .

#修改属性的值
#直接通过实例修改
class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0 #添加属性,指定默认值0,有默认值,所以形参中不用包含
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
my_car=Car("audi","A4",2016)
my_car.odometer_reading=23#实例可以使用这个属性
my_car.read_odometer()
you_car=Car("audi","A4",2016)
you_car.read_odometer()

this car has 23 mile on it .
this car has 0 mile on it .

#通过方法修改属性的值
class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!")
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
my_car=Car("audi","A4",2016) #创建实例
my_car.get_descriptive_name()#输出全名
my_car.read_odometer()#读出现在的英里
my_car.update_odometer(2)#更新

2016 audi A4
this car has 23 mile on it .
you can not roll ack an odamerer!

#通过方法修改属性的值
class Car():
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles
        
        
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
my_car=Car("audi","A4",2016) #创建实例
my_car.get_descriptive_name()#输出全名
my_car.read_odometer()#读出现在的英里23
my_car.update_odometer(25)#更新25
my_car.increase_odometer(3)#增加3
my_car.read_odometer()#读出现在的英里28

2016 audi A4
this car has 23 mile on it .
this car has 28 mile on it .

2.继承,编写类是,并不都是从空白开始的,如果你编写的是另一个累哦特殊版本,就称为继承,它将自动获得另一个类的所有方法和属性 原有的类称为父类,新的类称为子类,子类继承父类所有的属性和方法,同时还可以定义自己的属性和方法。就可以多重继承

#创建一个电动车,继承汽车
class Car(): #父类代码必须在前,在一个文件中
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles  
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
class ElectricaCar(Car):#子类继承父类
    def __init__(self,make,model,year):
        super().__init__(make,model,year) #super()是一个特殊函数,将子类父类关联起来这一行代码让子类调用父类init方法,
        #也拥有父类所有的属性和方法
        
my_tesla=ElectricaCar('tesla','model s',2016)

my_tesla.get_descriptive_name()#子类调用父类的方法


2016 tesla model s

#给子类定义特殊的方法和属性
class Car(): #父类代码必须在前,在一个文件中
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles  
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
class ElectricaCar(Car):#子类继承父类
    def __init__(self,make,model,year):
        '''电动车的独特之处,初始父类的属性,也初始化电动车特有的属性'''
        super().__init__(make,model,year) #super()是一个特殊函数,将子类父类关联起来这一行代码让子类调用父类init方法,
                                         #也拥有父类所有的属性和方法
        self.battery_size=70
        
    def describe_battery(self):
        print("this car has a "+str(self.battery_size)+"-kwh battery.")
              
my_tesla=ElectricaCar('tesla','model s',2016) #实例化

my_tesla.get_descriptive_name()#子类调用父类的方法
my_tesla.describe_battery()#调用自己方法

2016 tesla model s
this car has a 70-kwh battery.

#重写父类方法,只需要在子类定义一个与父类重名的方法就可以覆盖父类的方法
class Car(): #父类代码必须在前,在一个文件中
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles  
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
class ElectricaCar(Car):#子类继承父类
    def __init__(self,make,model,year):
        '''电动车的独特之处,初始父类的属性,也初始化电动车特有的属性'''
        super().__init__(make,model,year) #super()是一个特殊函数,将子类父类关联起来这一行代码让子类调用父类init方法,
                                         #也拥有父类所有的属性和方法
        self.battery_size=70
        
    def describe_battery(self):
        print("this car has a "+str(self.battery_size)+"-kwh battery.")
     
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model+"!!!!!!!!!!!") #重写父类
my_tesla=ElectricaCar('tesla','model s',2016) #实例化

my_tesla.get_descriptive_name()#子类调用父类的方法
my_tesla.describe_battery()#调用自己方法

2016 tesla model s!!!
this car has a 70-kwh battery.

#将实例作为属性,组合,大类分成小类,将小类作为实例来供大类调用
class Car(): #父类
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles  
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
class Battery(): #另一个类
    def __init__(self,battery_size=70):#battery_size形参可选的,不给值就默认70
        '''初始化电瓶的属性'''
        self.battery_size=battery_size
    def describe_battery(self):
        print("this car has a "+str(self.battery_size)+"-kwh battery.")
class ElectricaCar(Car):#子类继承父类
    def __init__(self,make,model,year):
        '''电动车的独特之处,初始父类的属性,也初始化电动车特有的属性'''
        super().__init__(make,model,year)#关联父类
        self.battery=Battery() ###添加一个self.battery,将Battery()实例化,存在属性self.battery中
my_tesla=ElectricaCar('tesla','model s',2016) #实例化

my_tesla.get_descriptive_name()#子类调用父类的方法
my_tesla.battery.describe_battery()#在my_tesla实例中查找battery属性,并对存在该属性中的Battrery实例调用方法describe_battery

2016 tesla model s
this car has a 70-kwh battery.

#我们可以在Battery中进行一系列操作,而不会让电瓶车类混乱不堪
class Car(): #父类
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=23 #添加属性,指定默认值0,有默认值,所以形参中不用包含
    
    def update_odometer(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("you can not roll ack an odamerer!") 
        
    def increase_odometer(self,miles):
        self.odometer_reading+=miles  
        
    def get_descriptive_name(self):
        print(str(self.year)+" "+self.make+" "+self.model)
    def read_odometer(self):
        print("this car has "+str(self.odometer_reading)+" mile on it .")
        
class Battery(): #另一个类
    def __init__(self,battery_size=70):#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 "+str(range)
        print(message)
        
class ElectricaCar(Car):#子类继承父类
    def __init__(self,make,model,year):
        '''电动车的独特之处,初始父类的属性,也初始化电动车特有的属性'''
        super().__init__(make,model,year)#关联父类
        self.battery=Battery() ###添加一个self.battery,将Battery()实例化,存在属性self.battery中
        
my_tesla=ElectricaCar('tesla','model s',2016) #实例化
my_tesla.get_descriptive_name()#子类调用父类的方法
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()#在my_tesla实例中查找battery属性,并对存在该属性中的Battrery实例调用方法describe_battery

2016 tesla model s
this car has a 70-kwh battery.
this car can go 240

3.导入模块
将上面的类Car,放在一个文件中,命名为car.py,称之为一个模块car
(1)导入单个类,新建一个my_car.py的文件,在里面导入Car类,操作如下:from car import Car
(2)在一个模块中存储多个类,将Battery,ElectricCar,存在car.py中,即可导入:from car import Battery,ElectricCar(逗号隔开)
(3)导入整个模块 import car
(4)导入整个模块所有类:from car import *
(5)在一个模块中导入另一个模块的类,建立两个模块,car.py如上,electirc_car.py包含两个类,Battery,ElectricCar
打开electirc_car.py,写入from car import Car
(6)导入python的标准库的类
from collections import OrderedDict(从标准库collections导入类OrderedDict有序的字典)
a=OrderedDict()实例化这个类,即创建了一个有序的空字典,没有用花括号哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值