自己按照书《Python编程从入门到实践》进行学习,一个小阶段后进行一点点整理,仅供参考。编译器为Geany。
类
面向对象编程是最优秀的软件编写方法之一,理解面向对象编程有助于自己像程序员那样看世界,还可以帮助自己明白自己编写的代码:不仅是各行代码的作用,还有代码背后更宏大的概念。
以Dog类为例,对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()+" rolled over!")
my_dog = Dog('willie',6)
print(str(my_dog.age))
1.__ init __ 构造方法
注:由于文本编辑的原因,正确的init与连续两个下划线之间是没有空格的
一旦用Dog类创建新实例时,python都会自动运行它。开头和末尾的两个下划线是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。
在本例中,这个构造方法包含了三个形参:self、name和age。形参是python自动传入的,它是一个指向实例本身的引用。(有点像this指针)
2.sit 和 roll_over 普通方法
这些方法不需要其他信息,传参的括号中不需要写任何参数。通过调用这些方法,可以实现方法内代码所要完成的任务。比如调用sit就可以输出小狗坐下的信息。
根据类可以创建实例,写法如下。
对象名 = 类名(参数列表)
my_dog = Dog('willie',6)
之后就可以通过对象来调用类中已经写好的方法了。
也可以获得对象的属性值。
my_dog.sit()
my_dog.roll_over()
print(str(my_dog.age))
修改属性的值
类中的每个属性都必须有初始值,哪怕是0或者是空的字符串,因此我们需要一些办法来定义或者修改属性的值。
1.给属性指定默认值。
在构造方法中直接指定某个属性的值,如下段代码所示。如果给定了属性一个默认值,那么在实例化对象的时候,不需要再特定指定一个值。
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
2.直接修改属性值
由上文我们得知,在类进行实例化对象后,可以通过对象调用它的属性值,于是便可以通过对象的调用来改变属性值。如:
dog.year = 10
3.通过方法修改属性值
可以定义一个新的方法,专门用于修改属性值。在下一段示例代码中,update_odometer方法增加了条件判断,在满足一定的条件以后便可以修改对象的属性值。
def update_odometer(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("you can't rool back an odometer!")
继承
以一段代码为例进行解释:
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size = 15
def describe_battery(self):
print("size = "+str(self.battery_size))
子类将继承父类的所有性质,创建子类时,父类必须包含在子类文件中,而且要写在前面。其中的super()将父类和子类联系起来,会让python调用其父类的构造方法。随后,可以增加子类自己的属性值,当然也可以增加子类自己的方法。
如果子类的某个方法与父类的方法同名,那么称之为“重写”父类的方法。在代码运行的时候将不会运行父类中的同名代码而是运行子类重写的代码。
同时,我们可以将一个实例作为属性,这样可以避免代码的冗长和难以理解。