详解Python类和对象内容


Posted in Python onJune 22, 2021
目录
  • 一、什么是Python类?
  • 二、Python类中的方法和属性
    • 2.1、Python类中的方法
    • 2.2、Python类中的属性
  • 三、面向对象的概念
    • 3.1、Python类:继承
    • 3.2、Python类:多态性
    • 3.3、Python类:抽象

 

一、什么是Python类?

python中的类是创建特定对象的蓝图。它使您可以以特定方式构建软件。问题来了,怎么办?类允许我们以一种易于重用的方式对我们的数据和函数进行逻辑分组,并在需要时进行构建。考虑下图。

详解Python类和对象内容

在第一张图片(A)中,它代表了一个可以被视为Class的房子的蓝图。使用相同的蓝图,我们可以创建多个房屋,这些可以视为Objects。使用类,您可以为您的程序添加一致性,以便以更简洁、更有效的方式使用它们。属性是通过点表示法访问的数据成员(类变量和实例变量)和方法。

  • 类变量是一个类的所有不同对象/实例共享的变量。
  • 实例变量是每个实例唯一的变量。它是在方法内部定义的,并且只属于类的当前实例。
  • 方法也称为函数,它们在类中定义并描述对象的行为。

现在,让我们继续前进,看看它在PyCharm中是如何工作的。要开始,首先看一下python类的语法。

语法:

class Class_name:
statement-1
.
.
statement-N

在这里,“class”语句创建了一个新的类定义。类的名称紧跟在python中的关键字“class”之后,后跟一个冒号。要在python中创建一个类,请考虑以下示例:

class employee:
 pass
 #no attributes and methods
 emp_1=employee()
 emp_2=employee()
 #instance variable can be created manually
 emp_1.first='aayushi'
 emp_1.last='Johari'
 emp_1.email='aayushi@edureka.co'
 emp_1.pay=10000
 
emp_2.first='test'
 emp_2.last='abc'
 emp_2.email='test@company.com'
 emp_2.pay=10000
 print(emp_1.email)
 print(emp_2.email)

输出?

aayushi@edureka.co

test@company.com

现在,如果我们不想手动设置这些变量怎么办。你会看到很多代码,而且很容易出错。所以为了让它自动,我们可以使用“init”方法。为此,让我们了解一下Python类中的方法和属性到底是什么。

 

二、Python类中的方法和属性

 

2.1、Python类中的方法

如果没有一些功能,现在创建一个类是不完整的。因此,可以通过设置各种属性来定义功能,这些属性充当与这些属性相关的数据和功能的容器。python中的函数也称为方法。谈到init方法,它是一个特殊的函数,每当实例化该类的新对象时都会调用它。您可以将其视为initialize方法,或者如果您来自任何其他面向对象的编程背景,例如C++、Java等,则可以将其视为构造函数。现在当我们在类中设置方法时,它们会自动接收实例。让我们继续使用python类并使用此方法接受名字、姓氏和薪水。

class employee:
    def __init__(self, first, last, sal):
        self.fname=first
        self.lname=last
        self.sal=sal
        self.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='aayushi'相同。然后我们创建了员工类的实例,我们可以在其中传递init方法中指定的值。此方法将实例作为参数。现在它将自动完成,而不是手动完成。

接下来,我们希望能够执行某种操作。为此,我们将向此类添加一个方法。假设我想要显示员工全名的功能。因此,让我们实际实现这一点。

class employee:
    def __init__(self, first, last, sal):
        self.fname=first
        self.lname=last
        self.sal=sal
        self.email=first + '.' + last + '@company.com'
 
    def fullname(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.test@company.com 

 aayushijohari 

 TESTTEST

正如你在上面看到的,我在一个类中创建了一个名为“全名”的方法。因此,python类中的每个方法都会自动将实例作为第一个参数。现在在这个方法中,我编写了打印全名并返回这个而不是emp_1名字和姓氏的逻辑。接下来,我使用了“self”,以便它适用于所有实例。因此每次都打印这个,我们使用一个方法。

继续使用Python类,有一些变量在类的所有实例之间共享。这些被称为类变量。实例变量对于每个实例都可以是唯一的,例如姓名、电子邮件、sal等。复杂吗?让我们通过一个例子来理解这一点。请参阅下面的代码以了解工资的年度增长情况。

class employee:
    perc_raise =1.05
    def __init__(self, first, last, sal):
        self.fname=first
        self.lname=last
        self.sal=sal
        self.email=first + '.' + last + '@company.com'
 
    def fullname(self):
            return '{}{}'.format(self.fname,self.lname)
    def apply_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)

输出?

350000

 367500

正如你在上面看到的,我先打印了工资,然后应用了1.5%的增长。为了访问这些类变量,我们需要通过类或类的实例来访问它们。现在,让我们了解Python类中的各种属性。

 

2.2、Python类中的属性

Python中的属性定义了对象、元素或文件的属性。有两种类型的属性:

内置类属性:Python类中存在各种内置属性。例如_dict_、_doc_、_name _等。让我举同样的例子,我想查看employee1的所有键值对。为此,您可以简单地编写以下包含类命名空间的语句:

打印

(emp_1.__dict__)

执行之后,你会得到这样的输出:

{'fname': 'aayushi', 'lname': 'johari', 'sal': 350000, 'email': 'aayushi.johari@company.com'}

用户定义的属性:属性是在类定义中创建的。我们可以为类的现有实例动态创建新属性。属性也可以绑定到类名。

接下来,我们有public、protected和private属性。让我们详细了解它们:

详解Python类和对象内容

接下来,让我们了解一个python类中最重要的组件,即Objects。

详解Python类和对象内容

正如我们上面讨论的,一个对象可以用来访问不同的属性。它用于创建类的实例。实例是在运行时创建的类的对象。

给你一个快速浏览,对象主要是看到周围的一切。例如:狗是动物类的对象,我是人类类的对象。同样,同一个电话类可以有不同的对象。这与我们已经讨论过的函数调用非常相似。让我们通过一个例子来理解这一点:

class MyClass:
 
   def func(self):
      print('Hello')
 
# create a new MyClass
ob = MyClass()
ob.func()

继续使用python类,让我们了解各种OOP概念。

 

三、面向对象的概念

OOPs指的是Python中的面向对象编程。好吧,Python并不是完全面向对象的,因为它包含一些过程函数。现在,您一定想知道过程编程和面向对象编程之间有什么区别。为了消除您的疑问,在过程式编程中,整个代码都被写入一个长过程,即使它可能包含函数和子例程。由于数据和逻辑混合在一起,因此无法管理。但是当我们谈论面向对象编程时,程序被拆分为独立的对象或几个小程序。每个对象代表应用程序的不同部分,这些部分有自己的数据和逻辑来在它们之间进行通信。例如,一个网站有不同的对象,如图像、视频等。

面向对象编程包括Python类、对象、继承、多态、抽象等概念,下面让我们详细了解这些主题。

 

3.1、Python类:继承

继承允许我们从基类/父类继承属性和方法。这很有用,因为我们可以创建子类并从父类中获取所有功能。然后我们可以在不影响父类的情况下覆盖和添加新功能。让我们通过一个例子来理解父类和子类的概念。

详解Python类和对象内容

正如我们在图像中看到的,孩子继承了父亲的属性。同样,在python中,有两个类:

1.父类(Super或Base类)

2.子类(子类或派生类)

继承属性的类称为子类,而继承属性的类称为父类。

继承是指创建包含其父类的专业化的子类的能力。它进一步分为四种类型,即单继承、多级继承、分层继承和多重继承。请参考下图以获得更好的理解。

详解Python类和对象内容

让我们继续使用python类并了解继承是如何有用的。

比如说,我想为员工类型创建类。我将创建'developers'和'managers'作为子类,因为开发人员和经理都有姓名、电子邮件和薪水,所有这些功能都在员工类中。因此,我们不必复制子类的代码,而是可以通过从员工那里继承来简单地重用代码。

class employee:
    num_employee=0
    raise_amount=1.04
    def __init__(self, first, last, sal):
        self.first=first
        self.last=last
        self.sal=sal
        self.email=first + '.' + last + '@company.com'
        employee.num_employee+=1
    def fullname (self):
        return '{} {}'.format(self.first, self.last)
    def apply_raise (self):
        self.sal=int(self.sal * raise_amount)
class developer(employee):
    pass
 
emp_1=developer('aayushi', 'johari', 1000000)
print(emp_1.email)

输出-

aayushi.johari@company.com

正如您在上面的输出中看到的,employee类的所有详细信息都可以在developer类中找到。现在,如果我想将开发人员的raise_amount更改为10%怎么办?让我们看看它是如何实际完成的。

class employee:
    num_employee=0
    raise_amount=1.04
    def __init__(self, first, last, sal):
        self.first=first
        self.last=last
        self.sal=sal
        self.email=first + '.' + last + '@company.com'
        employee.num_employee+=1
    def fullname (self):
        return '{} {}'.format(self.first, self.last)
    def apply_raise (self):
        self.sal=int(self.sal* raise_amount)
 
class developer(employee):
    raise_amount = 1.10
 
emp_1=developer('aayushi', 'johari', 1000000)
print(emp_1.raise_amount)

如您所见,它已将工资增长百分比从4%更新为10%。现在,如果我想再添加一个属性,比如在我们的init方法中使用一种编程语言,但它在我们的父类中不存在。有什么解决办法吗?是的!我们可以复制整个员工逻辑并这样做,但它会再次增加代码大小。因此,为了避免这种情况,让我们考虑以下代码:

class employee:
    num_employee=0
    raise_amount=1.04
    def __init__(self, first, last, sal):
        self.first=first
        self.last=last
        self.sal=sal
        self.email=first + '.' + last + '@company.com'
        employee.num_employee+=1
    def fullname (self):
        return '{} {}'.format(self.first, self.last)
    def apply_raise (self):
        self.sal=int(self.sal* raise_amount)
class developer(employee):
    raise_amount = 1.10
    def __init__(self, first, last, sal, prog_lang):
        super().__init__(first, last, sal)
        self.prog_lang=prog_lang
 
emp_1=developer('aayushi', 'johari', 1000000, 'python')
print(emp_1.prog_lang)

因此,只用一点点代码,我就进行了更改。我使用了super.__init__(first, last, pay)它继承了基类的属性。总之,继承用于重用代码并降低程序的复杂性。

 

3.2、Python类:多态性

计算机科学中的多态性是为不同的底层形式呈现相同界面的能力。实际上,多态意味着如果类B从类A继承,它不必继承关于类A的所有内容,它可以做一些与类A不同的事情。它最常用于处理继承。Python是隐式多态的,它能够重载标准运算符,以便它们根据上下文具有适当的行为。

让我们通过一个例子来理解:

class Animal:
    def __init__(self,name):
        self.name=name
        def talk(self):
            pass
class Dog(Animal):
            def talk(self):
                print('Woof')
class Cat(Animal):
    def talk(self):
        print('MEOW!')
c= Cat('kitty')
c.talk()
d=Dog(Animal)
d.talk()

输出-

Meow!Woof

接下来,让我们转向另一个面向对象的编程概念,即抽象。

 

3.3、Python类:抽象

抽象用于通过建模适合问题的类来简化复杂的现实。在这里,我们有一个无法实例化的抽象类。这意味着您不能为这些类创建对象或实例。它只能用于继承您称为基类的某些功能。因此,您可以继承功能,但同时,您无法创建此特定类的实例。让我们通过下面的例子来理解抽象类的概念:

from abc import ABC, abstractmethod     
 
class Employee(ABC):
    @abstractmethod
 
    def calculate_salary(self,sal):
        pass
 
class Developer(Employee):
 
    def calculate_salary(self,sal):
        finalsalary= sal*1.10
        return  finalsalary
 
emp_1 = Developer()
print(emp_1.calculate_salary(10000))

输出?

11000.0

正如你在上面的输出中看到的,我们已经将基本工资增加到10%,即现在的工资是11000。现在,如果你真的继续创建一个“Employee”类的对象,它会抛出一个错误,因为python不会'不允许你创建抽象类的对象。但是使用继承,您实际上可以继承属性并执行相应的任务。

以上就是详解Python类和对象内容的详细内容,更多关于Python类和对象的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用稀疏矩阵节省内存实例
Jun 27 Python
详细介绍Python函数中的默认参数
Mar 30 Python
python数组复制拷贝的实现方法
Jun 09 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
详解Django 时间与时区设置问题
Jul 23 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
python通过实例讲解反射机制
Oct 17 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
详解Python常用的魔法方法
Jun 03 Python
python析构函数用法及注意事项
Jun 22 #Python
Python自动化测试PO模型封装过程详解
python中的class_static的@classmethod的巧妙用法
Jun 22 #Python
Python答题卡识别并给出分数的实现代码
Python 中的单分派泛函数你真的了解吗
Jun 22 #Python
Python实现DBSCAN聚类算法并样例测试
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
You might like
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
Angular设置别名alias的方法
2018/11/08 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python学习思维导图(必看篇)
2017/06/26 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
家长评语大全
2014/01/22 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
道歉信怎么写
2015/05/12 职场文书
2015年工商所工作总结
2015/05/21 职场文书
闪闪的红星观后感
2015/06/08 职场文书
2016年党建工作简报
2015/11/26 职场文书
深入理解go slice结构
2021/09/15 Golang
Golang 并发编程 SingleFlight模式
2022/04/26 Golang