学习内容
一. 类如何定义
二.属性与方法和相关用法
三.继承与相关用法
四.文件的相关用法
一.类的定义
1.类是客观事物的抽象,对象是类的实例化。
类用class关键字来定义,定义的一般方法为:
class 类名:
类的内部实现
类名一般首字母大写
二.属性和方法
1.先看一段代码
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
self.love=0
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
print(self.name.title() + " rolled over!")
类中的函数被称之为方法
- 方法:init()是用来初始化属性的。
例如上边的这个例子,它就初始化了Dog这个类中俩个属性,名字和年龄。__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
2.属性:就是一些特征,在调用一个类的时候需要对属性初始化,它在类中一般与self绑在一起。
其次有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:
例如使用上边这个类:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
self.love=0
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
先是对my_dog进行初始化,即输入属性,在类中为它初始化。后边俩条语句是调用了类中的方法,因此对应的结果如下:
My dog's name is Willie.
My dog is 6 years old.
访问属性:
类创建的实例.属性(句点表示法)
调用方法:
类创建的实例.方法(句点表示法)
2.修改属性的值:
(1)直接修改属性的值
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
self.love=0
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
my_dog.name=kiss
print(my_dog.name)
此处直接对实例中的name属性做出修改.
(2).通过方法修改属性的值
例如:
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
self.love=0
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
def update_love(self,mileage):
self.love=mileage
my_dog = Dog('willie',6)
my_dog.update_love(520)
print(my_dog.love)
输出结果为:
520
三.继承
编写类时,并非总是要从空白开始。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
例如:
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__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
super()是一个特殊函数,帮助Python将父类和子类关联起来。这行代码让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。
输出的结果为:
2016 Tesla Model S
(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.")
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__(make, model, year)
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)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
输出结果为:
2016 Tesla Model S
This car has a 70-kWh battery
四,文件的相关用法
1.从文件中读取信息并打印
存储在程序的目录下
文件内容:
3.1415926535
8979323846
2643383279
文件名字pi_digits.txt
with open('pi_digits.txt ') as file_object:
comtents = file_object.read()
print(comtents.rstrip())//除去末尾的空字符串
其中open(‘pi_digits.txt’)返回一个表示文件pi_digits.txt的对
象;Python将这个对象存储在我们将在后面使用的变量中。
要让Python打开不与程序文件位于同一个目录中的文
件,需要提供文件路径,它让Python到系统的特定位置去查找,可以根据文件绝对路径查找。
2.写入文件
run以下代码 将会在目录中新产生一个空文件并写入i love you这句话
with open('data.txt','w') as file_object:
file_object.write("i love you\n")
在写入时,write函数参数内可用换行符\n让文件内容更加整洁
打开文件时,可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)或让你能够读取和写入文件的模式(‘r+’)。如果你省略了模式实参,Python将以默认的只读模式打开文件。
在现有文件中附加内容:
with open('data.txt','a') as file_object:
file_object.write("\nbut i love me better")
run代码以后 可在文件中看到附加的内容
3.存储数据
存储数据的俩种函数,json.dump()和json.load()
其一,存入一个列表
import json
number = [1,3,5,7,9]
filename = "numbers.json"
with open(filename,"w") as file_object:
json.dump(number,file_object)
run代码之后就可以在目录下找到filename并且在里面看到存储的列表了