1、类的定义与使用
类里面包括属性和方法。 这个__init__() 是一个特殊的方法,每当你根据类创建对象时,python都会自动运行这个方法。 在__init__()方法的定义中,形参self必不可少,还必须位于其他形参前面。 python调用这个__init__方法来创建实例时,将自动传入实参self。
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('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
2、修改属性的值
2.1 直接修改属性的值
要修改属性的值,最简单的方式是通过实例直接访问它。
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('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.name='hello'
my_dog.age=1
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
2.2 通过方法修改属性的值
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!")
def update_name(self,name):
self.name=name
def update_age(self,age):
self.age=age
my_dog=Dog('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.update_name('hello')
my_dog.update_age(1)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
3、继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法。原有的类称为父类,而新类称为子类。 子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
3.1 子类的方法__init__()
创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。 创建子类时,父类必须包含在当前文件中,且位于子类前面。 定义子类时,必须在括号内指定父类的名称。 子类中的方法__init__() 接受创建父类实例所需的信息。 super() 是一个特殊函数,帮助Python将父类和子类关联起来。super().init() 让Python调用父类的方法__init__() ,让子类实例包含父类的所有属性。父类也称为超类(superclass),名称super因此而得名。
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()
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())
3.2 给子类定义属性和方法
让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。
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()
class ElectricCar(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', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
3.3 重写父类的方法
对于父类的方法,都可对其进行重写。 可在子类中定义一个这样的方法,即它与要重写的父类方法同名。
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()
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70
def get_descriptive_name(self):
return 'override'
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()
4、导入类
模块结构: utilities.py
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!")
def update_name(self, name):
self.name = name
def update_age(self, age):
self.age = age
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()
4.1 导入单个类
from module_name import class_name main.py
from utilities import Dog
my_dog=Dog('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
4.2 导入多个类
from module_name import class_name1,class_name2 main.py
from utilities import Dog,Car
my_dog=Dog('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
my_car = Car('tesla', 'model s', 2016)
print(my_car.get_descriptive_name())
4.3 导入整个模块
import module_name main.py
import utilities
my_dog=utilities.Dog('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
my_car = utilities.Car('tesla', 'model s', 2016)
print(my_car.get_descriptive_name())
4.4 导入模块中的所有类
from module_name import * main.py
from utilities import *
my_dog=Dog('moka',6)
print("My dog's name is "+my_dog.name.title()+".")
print("My dog's age is "+str(my_dog.age)+".")
my_dog.sit()
my_dog.roll_over()
my_car = Car('tesla', 'model s', 2016)
print(my_car.get_descriptive_name())
|