建设工程询价网站有哪些,西安网站设计方案,东莞网络推广价格,WordPress发图册基本概念
面向对象编程是最有效的软件编写方法之一。理解面向对象编程可以让你像程序员那样从一个更加宏观的角度去理解代码#xff0c;并大大提高程序员之间的合作效率。面向对象编程的两个核心概念是对象和类 **对象#xff1a;**对象是能帮助我们解决问题的具体东西。比如…基本概念
面向对象编程是最有效的软件编写方法之一。理解面向对象编程可以让你像程序员那样从一个更加宏观的角度去理解代码并大大提高程序员之间的合作效率。面向对象编程的两个核心概念是对象和类 **对象**对象是能帮助我们解决问题的具体东西。比如一辆汽车一个人也可以是一个乐高玩具。每个对象都具有各自的特征如状态特征属性和行为特征方法。 **类**类是对象共同特征的描述他是对象的特征某种意义上的一种集合是一种抽象上的定义。如果将对象理解为一栋楼房那么类就相当于有是这个楼房的设计图。
在python中我们可以根据类来创建对象。这一过程叫做实例化。通过实例化我们可以去调用类的实例进行一系列的操作以完成我们想要完成的任务。
类的创建与使用
类的创建
我们首先创建一个Lego类
class Lego:def __init__(self, price, pieces, name):self.price priceself.pieces piecesself.name namedef discount(self):print(fThe discountprice is {0.88*self.price}.)def time(self):print(fThe time cost is {0.4*self.pieces}mins.)解释与说明 代码第1行class的意思是类这种写法即表示定义了一个名字为Lego的类 代码第2~5行是对类里面的属性进行初始化。init会默认被python自动调用。“self”的用途是当python调用这个方法来创建Dog的实例的时候会将实例自动传入self这个变量相当于self就成为了一个实例的代表。后面的price、pieces、name都是Lego的属性或者理解为“特点”。比如在Lego这个类中其特点有价格price、积木数pieces、积木名称name。注意初始化可以给属性赋予别的值。比如也可以这样初始化self.price 0. 代码第7~8行定义了第一个函数并传入了参数self其函数作用是输出打完八八折后的乐高价格。注意在python中我们可以使用·进行实例属性的调用如self.price 代码第10~11行定义了第二个函数并传入了参数self其函数作用是输出拼完这个乐高需要花的时间
实例的创建
依然是上面的类我们先创建一个乐高实例
city Lego(398, 356, Legocity)这样我们就得到了一个price398,pieces356,nameLegocity的实例注意self不需要单独传入参数。
创建完实例后我们就可以用city.price来调用属性的值用city.discount来调用方法。
实例的修改
实例的属性可以直接进行修改比如
city.price 698此外也可以在类中多加一个和修改属性相关的方法并调用该方法进行修改。这样的方式看似繁琐但是实际上方便后续代码修改对于大型代码工程建议使用后者。
继承
在python中并不是所有类都需要从头开始。有些类只是在另外一些类上进行增添修改如果仍然将别的类的代码全部复制一遍则会提高代码的复杂度。针对这种情况python中有一种方式——继承可以让一个类继承另外一个类继而可以使用那个类的所有属性和方法而被继承的类称为父类继承的类称为子类。
子类方法–init–的继承
我们原先的Lego类的代码里增添一个新的子类LegocityLegocity是Lego的一种类别所以正好有“父类”与“子类”的关系。
class Lego:def __init__(self, price, pieces, name):self.price priceself.pieces piecesself.name namedef discount(self):print(fThe discountprice is {0.88*self.price}.)def time(self):print(fThe time cost is {0.4*self.pieces}mins.)class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)解释与说明
代码第13行Legocity后面的括号内的Lego说明其继承的是Lego类代码第15行super函数是继承的关键该函数可以调用其父类的方法这样之后Legocity类就拥有Lego类的所有属性和方法了
给子类定义属性和方法
class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)self.legocode 10283def printcode(self):print(f{legocode})解释与说明 代码第4行作用是给子类增加了一种属性legocode。乐高每一种积木都有其特殊的编码即legocode。 代码第6~7行定义了子类一个新的方法。
注意如果我们不想在子类中沿用父类中的某个或者某些方法我们会对方法进行重写即重新定义该方法即可。
导入类
我们需要使用的类可能会有很多这时候我们会将其分文件进行书写不同的类。但是这时候就涉及到一个问题就是如何将这些类进行导入。
导入单个类
假设我们在文件lego中有这样一些代码
class Lego:def __init__(self, price, pieces, name):self.price priceself.pieces piecesself.name namedef discount(self):print(fThe discountprice is {0.88*self.price}.)def time(self):print(fThe time cost is {0.4*self.pieces}mins.)
我们想要在另外一个文件中导入Lego类我们可以直接
from lego import Lego如果该文件中有多个类我们只想导入一个类只要使用对应类名即可。
导入多个类
假设我们在文件lego中有这样一些代码
class Lego:def __init__(self, price, pieces, name):self.price priceself.pieces piecesself.name namedef discount(self):print(fThe discountprice is {0.88*self.price}.)def time(self):print(fThe time cost is {0.4*self.pieces}mins.)class Legocity(Lego):def __init__(self, price, pieces, name):super().__init__(price, pieces, name)self.legocode 10283def printcode(self):print(f{legocode})我们想要在另外一个文件中导入Lego类我们可以直接
from lego import Lego,Legocity导入整个模块
还是上面的例子我们可以如下写
import lego注意这里lego是小写指的是文件名大写Lego才指的是类名
使用别名
使用“as”即可
from lego import Lego as lg这样写可以大大简约化使用长类名的复杂度方便书写、提高效率。