创建一个简单的类根据dog类创建的每个实列都将存储名字和年龄。我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:
1 class dog(): 2 一次模拟小狗的简单尝试 3 def __init__(self, name, age): 4 初始化属性name和age 5 self.name = name 6 self.age = age 7 def sit(self): 8 模拟小狗被命令时蹲下 9 print(self.name.title() + now is sitting.)10 def roll_over(self):11 模拟小狗被命令时打滚12 print(self.name.title() + rolled over!)13 my_dog = dog('tom','3')14 print(my dog name is + my_dog.name.title() )
根据约定,在python中,首字母大写的名称指的是类:类中的函数称为方法
方法__init__(),开头和末尾都有2个下划线,这是一种约定,旨在避免python默认方法与普通方法发生名称的冲突。我们将方法__init__()定义成了包含三个形参: self、 name和age。在这个方法的定义中,参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为python调用这个__init__()方法来创建dog实例时,将自动传入实参self。 两个变量self_name和self_age都有前缀self,以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实列来访问这些变量。像这样可通过实例访问的变量称为属性。
在python2.x中,如果创建类需要在括号后面加上(object)。
访问属性继续上面的例子,方法__init__()创建一个表示特定小狗的示例,并使用我们提供的值来设置属性name和age,方法__init__()并未显式地包含return语句,但python自动返回一个表示这条小狗的示例。我们将这个示例存储在变量my_dog中。
class dog():一次模拟小狗的简单尝试def __init__(self, name, age):初始化属性name和ageself.name = name
self.age = agedef sit(self):模拟小狗被命令时蹲下print(self.name.title() + now is sitting.)def roll_over(self):模拟小狗被命令时打滚print(self.name.title() + rolled over!)
my_dog = dog('tom',3)print(my_dog.name)print(my_dog.age)#运行结果tom3
调用方法
class dog():一次模拟小狗的简单尝试def __init__(self, name, age):初始化属性name和ageself.name = name
self.age = agedef sit(self):模拟小狗被命令时蹲下print(self.name.title() + now is sitting.)def roll_over(self):模拟小狗被命令时打滚print(self.name.title() + rolled over!)
my_dog = dog('tom',3)
my_dog.sit()
my_dog.roll_over()#运行结果tom now is sitting.
tom rolled over!
根据dog类创建实例后,就可以使用句点表示来调用dog来定义的任何方法
创建多个实例
class dog():一次模拟小狗的简单尝试def __init__(self, name, age):初始化属性name和ageself.name = name
self.age = agedef sit(self):模拟小狗被命令时蹲下print(self.name.title() + now is sitting.)def roll_over(self):模拟小狗被命令时打滚print(self.name.title() + rolled over!)
my_dog = dog('tom',3)
your_dog = dog('mei',2)print(my dog name is + my_dog.name.title())print(your dog name is + your_dog.name.title())#运行结果my dog name is tom
your dog name is mei
可按需求根据类创建任意数量的实例。
使用类和实例给属性指定默认值
类中的每个属性都必须有初始值,哪怕这个值是0或空字符串,在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值时可以的没如果你对某个属性这样做了,就无需包含为他提供初始化的形参。
class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_name
my_car = car('audi', 'a4', '2017')print(my_car.model)print(my_car.get_descri_name())#运行结果a42017 a4 audi
直接修改属性的值
class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_name
my_car = car('audi', 'a4', '2017')print(my_car.get_descri_name())
my_car.year = 2016print(my_car.get_descri_name())#运行结果2017 a4 audi2016 a4 audi
通过方法修改
class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_namedef update(self, mile):更新里程值if mile > self.odometer_reading:
self.odometer_reading = mileelse:print(you can't roll back an odometer)def increment_odometer(self,mile):增加里程self.odometer_reading += miledef read_odometer(self):打印汽车的里程print(this car has + str(self.odometer_reading) + miles on it.)
my_car = car('audi', 'a4', '2017')
my_car.read_odometer()
my_car.odometer_reading = 10 #直接修改里程值my_car.update(200) #通过方法修改里程my_car.read_odometer()
my_car.increment_odometer(10)
my_car.read_odometer()#运行结果this car has 100 miles on it.
this car has 200 miles on it.
this car has 210 miles on it.
继承 如果我们想再一个class继承另一个类的属性,可以在类后面括号中加入类的名称,举例如下:
class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_namedef update(self, mile):更新里程值if mile > self.odometer_reading:
self.odometer_reading = mileelse:print(you can't roll back an odometer)def increment_odometer(self,mile):增加里程self.odometer_reading += miledef read_odometer(self):打印汽车的里程print(this car has + str(self.odometer_reading) + miles on it.)class electriccar(car):电动汽车的独特特性def __init__(self, make, model, year):初始化父类的属性super().__init__(make, model, year)
my_tesla = electriccar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())#运行结果2016 model s tesla
为了继承父类的属性,还需要加入一个特殊的函数super(),帮助python将夫类和子类关联起来。
在python2.x中,类supper的格式如下:supper(eletric,self).__init__(make, model, year)
给子类定义属性和方法
让一个类继承另一个类后,可添加区分子类和父类所属的新属性和新方法。
将实例用作属性class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_namedef update(self, mile):更新里程值if mile > self.odometer_reading:
self.odometer_reading = mileelse:print(you can't roll back an odometer)def increment_odometer(self,mile):增加里程self.odometer_reading += miledef read_odometer(self):打印汽车的里程print(this car has + str(self.odometer_reading) + miles on it.)class battery():一次模拟电动汽车def __init__(self,battery_size=70):初始化电瓶的属性self.battery_size = battery_sizedef 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)
self.battery = battery()
my_tesla = electriccar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()#运行结果2016 model s tesla
this car has a 70-kwh battery.
导入类导入单个或者多个类
一个文件car.py
class car():一次模拟汽车的简单尝试def __init__(self, make, model, year):汽车的初始化self.make = make
self.model = model
self.year = year
self.odometer_reading = 100def get_descri_name(self):描述汽车long_name = str(self.year) + ' ' + self.model + ' ' + self.makereturn long_namedef update(self, mile):更新里程值if mile > self.odometer_reading:
self.odometer_reading = mileelse:print(you can't roll back an odometer)def increment_odometer(self,mile):增加里程self.odometer_reading += miledef read_odometer(self):打印汽车的里程print(this car has + str(self.odometer_reading) + miles on it.)class battery():一次模拟电动汽车def __init__(self,battery_size=70):初始化电瓶的属性self.battery_size = battery_sizedef 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)
self.battery = battery()
创建另一个文件my_car.py,导入一个类
from car import car
my_car = car('audi', 'a4', '2017')
一个模块中可以存储多个类,所以可以一次导入多个类
from car import car,battery,electriccar
my_tesla = electriccar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())
my_tesla.battery.describe_battery()
导入整个模块
import car #导入整个模块的时候,需要使用句点表示法访问需要的类
my_tesla = car.electriccar('tesla', 'model s', '2016')print(my_tesla.battery)
导入所有类
from car import * #导入所有的类
以上就是创建一个简单的类的实例教程的详细内容。