当前位置: 首页 > 后端技术 > Python

关于Python类和对象的完整文章

时间:2023-03-25 22:05:49 Python

摘要:这是关于Python类和对象的完整文章。本文分享自华为云社区《从零开始学python | Python 类和对象—面向对象编程》,原作者:雨川。在Python在活跃开发者方面将超越其他语言之后,对Python开发者的需求只会越来越大。Python遵循面向对象的编程范式。它处理声明python类,从中创建对象并与用户交互。在面向对象语言中,程序被分割成独立的对象,也可以说分成几个小程序。每个对象代表应用程序的不同部分,它们可以相互通信。在此python类博客中,您将按以下顺序了解类和对象的各个方面:什么是Python类?类中的方法和属性什么是对象?OOP概念:继承多态性抽象什么是Python类?python中的类是创建特定对象的蓝图。它允许您以特定方式构建软件。问题来了,怎么办?类允许我们以一种易于重用和根据需要构建的方式对数据和函数进行逻辑分组。考虑下图。在第一张图片(A)中,它代表了一个可以被视为一个类的房子的蓝图。使用相同的蓝图,我们可以创建多个房屋,这些可以被视为对象。使用类,您可以为您的程序增加一致性,以更简洁和有效的方式使用它们。属性是数据成员(类变量和实例变量)和通过点表示法访问的方法。类变量是由类的所有不同对象/实例共享的变量。实例变量是每个实例唯一的变量。它是在方法内部定义的,只属于类的当前实例。方法,也称为函数,在类中定义并描述对象的行为。现在,让我们继续看看它在PyCharm中是如何工作的。开始之前,先看看python类的语法。语法:classClass_name:statement-1..statement-N这里,“class”语句创建了一个新的类定义。类的名称紧跟在python中的关键字“class”之后,后跟一个冒号。要在python中创建一个类,请考虑以下示例:Johari'emp_1.email='aayushi@edureka.co'emp_1.pay=10000emp_2.first='test'emp_2.last='abc'emp_2.email='test@company.com'emp_2.pay=10000打印(emp_1.email)print(emp_2.email)输出–aayushi@edureka.cotest@company.com现在如果我们不想手动设置这些变量怎么办。你会看到很多代码,而且很容易出错。所以要让它自动执行,我们可以使用“init”方法。为此,让我们了解Python类中的方法和属性到底是什么。Python类中的方法和属性如果没有某些功能,现在创建类是不完整的。因此,可以通过设置各种属性来定义功能,这些属性充当与这些属性相关的数据和功能的容器。python中的函数也称为方法。谈到init方法,它是一个特殊的函数,每当实例化类的新对象时都会调用它。您可以将其视为初始化方法,或者如果您来自任何其他面向对象的编程背景,例如C++、Java等,则将其视为构造函数。现在当我们在类中设置方法时,它们会自动接收实例。让我们坚持我们的python类并使用此方法接受名字、姓氏和薪水。员工类:def__init__(self,first,last,sal):self.fname=firstself.lname=lastself.sal=salself.email=first+'.'+last+'@company.com'emp_1=employee('aayushi','johari',350000)emp_2=employee('test','test',100000)print(emp_1.email)print(emp_2.email)现在在我们的“init”方法中,我们设置了这些实例变量(self、first、last、sal)。self是实例,就是说每当我们写self.fname=first的时候,都和emp_1.first='ayushi'是一样的。然后我们创建员工类的实例,我们可以在其中传递init方法中指定的值。此方法将实例作为参数。现在它将自动完成,而不是手动完成。接下来,我们希望能够执行某种操作。为此,我们将向此类添加一个方法。假设我想要显示员工全名的功能。因此,让我们实际实现它。员工类:def__init__(self,first,last,sal):self.fname=firstself.lname=lastself.sal=salself.email=first+'.'+last+'@company.com'deffullname(self):return'{}{}'.format(self.fname,self.lname)emp_1=employee('aayushi','johari',350000)emp_2=employee('test','test',100000)print(emp_1.email)print(emp_2.email)print(emp_1.fullname())print(emp_2.fullname())输出–aayushi.johari@company.com测试。test@company.comaayushijohariTESTTEST如您所见,我在一个类中创建了一个名为“全名”的方法。因此,python类中的每个方法都会自动将实例作为第一个参数。现在在这个方法中,我编写了打印全名并返回这个而不是emp_1名字和姓氏的逻辑。接下来,我使用“self”以便它适用于所有实例。所以每次打印这个,我们使用一个方法。继续使用Python类,类的所有实例之间共享一些变量。这些称为类变量。实例变量可以是每个实例唯一的,比如name、email、sal等,是不是很复杂?让我们通过一个例子来理解这一点。年薪涨幅见下面代码。员工类:perc_raise=1.05def__init__(self,first,last,sal):self.fname=firstself.lname=lastself.sal=salself.email=first+'.'+last+'@company.com'deffullname(self):return'{}{}'.format(self.fname,self.lname)defapply_raise(self):self.sal=int(self.sal*1.05)emp_1=employee('aayushi','johari',350000)emp_2=employee('test','test',100000)print(emp_1.sal)emp_1.apply_raise()print(emp_1.sal)输出–350000367500正如你在上面看到的,我先打印了工资,然后申请了1.5%的增长。为了访问这些类变量,我们需要通过类或者类的实例来访问它们。现在,让我们了解Python类中的各种属性。Python类中的属性Python中的属性定义对象、元素或文件的属性。有两种类型的属性:内置类属性:Python类中存在各种内置属性。比如_dict_,_doc_,_name_等。我举同样的例子,我想查看employee1的所有键值对。为此,您可以简单地编写以下包含类命名空间的语句:print(emp_1.__dict__)执行后,您将得到如下输出:{'fname':'aayushi','lname':'johari','sal':350000,'email':'aayushi.johari@company.com'}用户定义的属性:属性是在类定义中创建的。我们可以为类的现有实例动态创建新属性。属性也可以绑定到类名。接下来,我们有public、protected和private属性。让我们详细了解它们:接下来,让我们了解Python类最重要的组件,Objects。正如我们上面所讨论的,一个对象可以用来访问不同的属性。它用于创建类的实例。实例是在运行时创建的类的对象。给你一个快速的扫视,这个对象主要是为了看到它周围的一切。例如:Dog是Animal类的对象,I是Human类的对象。此外,同一电话类可以有不同的对象。这与我们已经讨论过的函数调用非常相似。让我们通过一个例子来理解这一点:classMyClass:deffunc(self):print('Hello')#createanewMyClassob=MyClass()ob.func()转到python类,让我们理解各种OOP概念。面向对象的概念OOPs指的是Python中的面向对象编程。嗯,Python不完全是面向对象的,因为它包含一些过程函数。现在,您一定想知道过程编程和面向对象编程之间的区别是什么。为了消除您的疑虑,在过程编程中,整个代码都写在一个长过程中,即使它可能包含函数和子例程。它无法管理,因为数据和逻辑混合在一起。但是当我们谈到面向对象编程时,程序被拆分成独立的对象或几个小程序。每个对象代表应用程序的不同部分,它们有自己的数据和逻辑来在它们之间进行通信。例如,一个网站有图像、视频等不同的对象。面向对象编程包括Python类、对象、继承、多态、抽象等概念。下面让我们详细了解这些主题。Python类:继承继承允许我们从基类/父类继承属性和方法。这很有用,因为我们可以创建子类并从父类获得所有功能。然后我们可以在不影响父类的情况下覆盖和添加新功能。让我们通过一个例子来理解父类和子类的概念。正如我们在图像中看到的,孩子继承了父母的属性。同样,在python中,有两个类:父类(SuperorBaseclass)2.子类(SubclassorDerivedclass)继承属性的类称为子类,而继承属性的类称为父类。继承是指创建包含其父类特化的子类的能力。它进一步分为四种类型,即单继承、多级继承、层次继承和多继承。请参考下图以获得更好的理解。让我们继续讨论python类,看看继承有何用处。例如,我想为员工类型创建类。我将创建“开发人员”和“经理”作为子类,因为开发人员和经理有姓名、电子邮件和薪水,所有这些功能都在员工类中。因此,我们可以通过继承Employee来简单地重用代码,而不是复制子类的代码。雇员类:num_employee=0raise_amount=1.04def__init__(self,first,last,sal):self.first=firstself.last=lastself.sal=salself.email=first+'.'+last+'@company.com'employee.num_employee+=1deffullname(self):return'{}{}'.format(self.first,self.last)defapply_raise(self):self.sal=int(self.sal*raise_amount)classdeveloper(employee):passemp_1=developer('ayushi','johari',1000000)print(emp_1.email)输出-aayushi.johari@company.com正如你在上面的输出中看到的,employee类所有的细节都可以在developer类中找到。现在,如果我想将开发人员的raise_amount更改为10%怎么办?让我们看看它是如何实际完成的。雇员类:num_employee=0raise_amount=1.04def__init__(self,first,last,sal):self.first=firstself.last=lastself.sal=salself.email=first+'.'+last+'@company.com'employee.num_employee+=1deffullname(self):return'{}{}'.format(self.first,self.last)defapply_raise(self):self.sal=int(self.sal*raise_amount)classdeveloper(employee):raise_amount=1.10emp_1=developer('ayushi','johari',1000000)print(emp_1.raise_amount)输出-1.1如您所见,它更新了工资增长百分比4%到10%。现在,如果我想再添加一个属性,比如在我们的init方法中使用一种编程语言,但它在我们的父类中不存在。有什么解决办法吗?是的!我们可以复制整个员工逻辑并这样做,但它会再次增加代码大小。所以,为了避免这种情况,让我们考虑以下代码:classemployee:num_employee=0raise_amount=1.04def__init__(self,first,last,sal):self.first=firstself.last=lastself.sal=salself。电子邮件=第一+'.'+last+'@company.com'employee.num_employee+=1deffullname(self):return'{}{}'.format(self.first,self.last)defapply_raise(self):self.sal=int(self.sal*raise_amount)类developer(employee):raise_amount=1.10def__init__(self,first,last,sal,prog_lang):super().__init__(first,last,sal)self.prog_lang=prog_langemp_1=developer('aayushi','johari',1000000,'python')print(emp_1.prog_lang)所以只用了一点代码,我就做出了改变。我使用了继承基类属性的super.__init__(first,last,pay)。综上所述,继承就是用来重用代码,降低程序复杂度的。Python类:多态性计算机科学中的多态性是指将相同的接口呈现给不同的底层形式的能力。实际上,多态性意味着如果B类继承自A类,则它不必继承A类的所有内容,它可以做一些与A类不同的事情。它最常用于处理继承。Python是隐式多态的,能够重载标准运算符,以便它们根据上下文具有适当的行为。让我们用一个例子来理解:):deftalk(self):print('MEOW!')c=Cat('kitty')c.talk()d=Dog(Animal)d.talk()output-Meow!Woof接下来,让我们转向另一个面向对象的编程概念,抽象。Python类:抽象抽象用于通过建模适合问题的类来简化复杂的现实。这里我们有一个不能实例化的抽象类。这意味着您不能创建这些类的对象或实例。它只能用于继承您称为基类的某些功能。因此,您可以继承功能,但同时不能创建该特定类的实例。让我们通过下面的例子来理解抽象类的概念:fromabcimportABC,abstractmethodclassEmployee(ABC):@abstractmethoddefcalculate_salary(self,sal):passclassDeveloper(Employee):defcalculate_salary(self,sal):finalsalary=sal*1.10returnfinalsalaryemp_1=Developer()print(emp_1.calculate_salary(10000))output–11000.0正如你在上面的输出中看到的,我们已经将基本工资增加到10%,即工资现在是11000。现在,如果你真的继续创建类“Employee”的对象,它会抛出一个错误,因为python不允许你创建抽象类的对象。但是通过继承,你实际上可以继承属性并执行相应的任务。点击关注,第一时间了解华为云的新鲜技术~