python编程入门加拿大_class——python编程从入门到实践

Python

Python开发

Python语言

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类

classCar:"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make=make

self.model=model

self.year=yeardefget_descriptive_name(self):"""返回整洁的描述性信息"""long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()

my_new_car= Car('audi', 'a4', '2019') #创建实例

print(my_new_car.get_descriptive_name()) #调用类的方法

2. 给属性指定默认值

classCar:"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 0 #给属性指定默认值

defget_descriptive_name(self):"""返回整洁的描述性信息"""long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()defread_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. 修改属性的值

classCar:"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 0 #给属性指定默认值

defget_descriptive_name(self):"""返回整洁的描述性信息"""long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()defread_odometer(self):"""打印一条消息指出汽车里程"""

print("This car has" + str(self.odometer_reading) + "miles on it.")

defupdate_odometer(self, mileage):"""将里程数设为指定的值"""self.odometer_reading=mileagedefincrement_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. 给子类定义属性和方法

classElectricCar(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_sizedefdescribe_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= 270message= "This car can go approximately" +str(range)

message= message + "miles on a full charge."

print(message)classElectricCar(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() #继续通过属性中的实例调用方法

导入类

不断的给类添加新的功能,文件会变得越来越长,即便使用了继承也是如此。为了让文件尽可能整洁,可以将类存储在模块中,然后再在主程序中导入所需的模块。

1. 导入单个模块

car.py

"""一个可用于表示汽车的类"""

classCar:"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make=make

self.model=model

self.year=year

self.odometer_reading=0defget_descriptive_name(self):"""返回整洁的描述性信息"""long_name= str(self.year) + ' ' + self.make + ' ' +self.modelreturnlong_name.title()defread_odometer(self):"""打印一条消息指出汽车里程"""

print("This car has" + str(self.odometer_reading) + "miles on it.")defupdate_odometer(self, mileage):"""将里程数设为指定的值

拒绝将里程表往回拨"""

if mileage >=self.get_descriptive_name():

self.odometer_reading=mileageelse:print("You can't roll back an odometer!")defincrement_odometer(self, miles):"""将里程读数增加指定量"""self.odometer_reading= self.odometer_reading + miles

my_car.py

from car import Car #导入类

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

my_new_car.odometer_reading= 23my_new_car.read_odometer()

2. 在一个模块中存储多个类

在car.py中添加以下代码:

classBattery:"""一次模拟电动汽车电瓶的简单尝试"""

def __init__(self, battery_size=85):"""初始化电瓶属性"""self.battery_size=battery_sizedefdescribe_battery(self):"""打印一条描述电瓶容量的消息"""

print("This car has a" + str(self.battery_size) + "kwh battery.")def get_range(self): #新增方法

"""打印一条消息,指出电瓶的续航里程"""

globalrgif self.battery_size == 70:

rg= 240

elif self.battery_size == 85:

rg= 270message= "This car can go approximately" +str(rg)

message= message + "miles on a full charge."

print(message)classElectricCar(Car):"""电动汽车的独特之处"""

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

self.battery= Battery()

此时car.py中包含3个类,可以单独导出其中的一个类使用:

my_electric_car.py

from car importElectricCar

my_tesla= ElectricCar('tesla', 'roadster', 2019)print(my_tesla.get_descriptive_name())

my_tesla.battery.describe_battery()

my_tesla.battery.get_range()

3. 从一个模块导入多个类

my_cars.py

from car import Car, ElectricCar #导入一个模块中的两个类

my_beetle= Car('volkswagen', 'beetle', 2019)print(my_beetle.get_descriptive_name())

my_tesla= ElectricCar('tesla', 'roadster', 2019)print(my_tesla.get_descriptive_name())

4. 导入整个模块

my_cars.py

importcar

my_beetle= car.Car('volkswagen', 'beetle', 2019)print(my_beetle.get_descriptive_name())

my_tesla= car.ElectricCar('tesla', 'roadster', 2019)print(my_tesla.get_descriptive_name())

5. 导入模块中的所有类

导入模块中的所有类,可使用一下语法:

from module_name import *

但是,不推荐使用这种导入方式,避免引发名称冲突。

6. 在一个模块中导入另一个模块

若将Car类存储在一个模块car.py中,将ElectricCar和Battery类存储在模块electriic_car.py中:

electriic_car.py

from car importCarclassBattery:

...classElectricCar(Car)

...

my_cars.py

fromcarimportCar

fromelectriic_carmy_beetle= Car('volkswagen', 'beetle', 2019)print(my_beetle.get_descriptive_name())

my_tesla= ElectricCar('tesla', 'roadster', 2019)print(my_tesla.get_descriptive_name())

内容来源于网络,如有侵权请联系客服删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值