Python 学习入门之类
面向对象编程是最有效的软件编写方法之一。在面向对象编程中,编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
类的简单示例
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() + " roll over.")
类中的函数称为方法,有关函数的一切都适用于方法,唯一重要的差别是调用方法的方式
其中__init__()是一个特殊的方法,每当根据类创建新实例时,python都会自动运行他。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突
类中每个属性都要必须有初始值,若要给属性指定默认值,可在__init__()指定初始值,且无需给它提供初始值的形参
我们创建Dog实例时,Python将调用Dog类方法__init__()。我们将通过实参向Dog()传递名字和年龄;self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参提供值
在python2.7 中创建类
在python2.7 中创建类时,需要做细微的修改————在括号内包含单词object
class ClassName(object):
--snip--
根据类创建实例
可将类视为有关如何创建实例的说明。
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.sit()
my_dog.roll_over()
修改属性的值
直接修改属性的值
my_dog.age = 7
print("My dog is " + str(my_dog.age) + " years old")
通过方法修改属性的值
class Car():
def __init__(self,make,model,year):
self.make = make
self. model =model
self.year= year
self.odometer_reading = 0
def update_odometer (self,mileage):
self.odometer_reading = mileage
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.")
my_car = Car("audi","A6",2016)
print(my_car.get_descriptive_name())
my_car.update_odometer(23)
my_car.read_odometer()
继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。
子类继承了其父类所有属性和方法,同时还可以定义自己的属性和方法
子类的方法__init__()
创建子类的实例时,,python首先需要完成的任务是给父类的所有的属性赋值。为此,子类方法__init__()需要父类施以缓手
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
my_tesla = ElectricCar("tesla","modle s",2018)
print(my_tesla.get_descriptive_name())
在python 2.7中的继承
class ElectricCar(Car):
def __init__(self,make,model,year):
super(ElectricCar,self).__init__(make,model,year)
给子类定义属性和方法
让一个类继承另一个类后,可添加区分父类所需的新属性和方法
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size = 70
def decribe_battery(self):
print("This car has a " + str(self.battery_size) + "-kwh battery.")
my_tesla = ElectricCar("tesla","modle s",2018)
print(my_tesla.get_descriptive_name())
my_tesla.decribe_battery()
重写父类的方法
对于父类地方法,只要它不符合子类模拟的实物的行为,都可以对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类的方法同名。
这样,python将不会这个父类方法,而关注你在子类中定义的相应方法