详解Python类和对象内容

目录
  • 一、什么是Python类?
  • 二、Python类中的方法和属性
    • 2.1、Python类中的方法
    • 2.2、Python类中的属性
  • 三、面向对象的概念
    • 3.1、Python类:继承
    • 3.2、Python类:多态性
    • 3.3、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类中最重要的组件,即Objects。

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

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

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中,有两个类:

1.父类(Super或Base类)

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

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

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

让我们继续使用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类和对象的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python类的继承、多态及获取对象信息操作详解

    本文实例讲述了Python类的继承.多态及获取对象信息操作.分享给大家供大家参考,具体如下: 继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(self): print("Animal 构造函数调用!") def eat(self): print("Animal is eatting!") 写两个子类,Cat和Dog类,继

  • 全面了解python中的类,对象,方法,属性

    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性(特征)和行为来描述一个对象的.比如家里的小狗,它的颜色,大小,年龄,体重等是它的属性或特征.它会汪汪叫,会摇尾巴等是它的行为. 我们在描述一个真实对象(物体)时包括两个方面: 它可以做什么(行为) 它是什么样的(属性或特征). 在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象

  • 在python的类中动态添加属性与生成对象

    本文将通过一下几个方面来一一进行解决 1.程序的主要功能 2.实现过程 3.类的定义 4.用生成器generator动态更新每个对象并返回对象 5.使用strip 去除不必要的字符 6.rematch匹配字符串 7.使用timestrptime提取字符串转化为时间对象 8.完整代码 程序的主要功能 现在有个存储用户信息的像表格一样的文档:第一行是属性,各个属性用逗号(,)分隔,从第二行开始每行是各个属性对应的值,每行代表一个用户.如何实现读入这个文档,每行输出一个用户对象呢? 另外还有4个小要求

  • Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    本文实例讲述了Python面向对象程序设计中类的定义.实例化.封装及私有变量/方法.分享给大家供大家参考,具体如下: 1. 定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): self.__data1=data1 self.data2=data2 def __func1(self): print("MyClass类的私有方法被调用!") def print_data(self): s

  • Python类和对象的定义与实际应用案例分析

    本文实例讲述了Python类和对象的定义与实际应用.分享给大家供大家参考,具体如下: 1.DVD管理系统 # -*- coding:utf-8 -*- #! python3 class dvd: def __init__(self,name,price,state): self.name=name; self.price=price self.state=state def __str__(self): stat='已借出'; if self.state==1: stat='未借出' retur

  • python实现比较类的两个instance(对象)是否相等的方法分析

    本文实例讲述了python实现比较类的两个instance(对象)是否相等的方法.分享给大家供大家参考,具体如下: 对于同一个Class,可以创建不同的实例(instance), 如何比较这两个 instance 是否相等呢?我们知道,对于计算机来说,要判断两个对象是否相等,就是看在内存中的地址是否同一个.如果内存地址一样,那么肯定是相等的.这种情况通常出现在一个对象是另外一个对象的引用时出现. 但在实际的开发过程中,要比较两个对象是否相等,并不是通过内存地址来判断的,而是通过这两个对象的部分属

  • Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

    本文实例讲述了Python面向对象程序设计类变量与成员变量.类方法与成员方法用法.分享给大家供大家参考,具体如下: 类变量与成员变量 在类中声明的变量我们称之为类变量[静态成员变量], 在init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量. 类变量直接可以通过类名来调用. 1.若类变量与成员同时存在并且同名 使用对象来调用的时候,获取的结果是成员变量的值, 使用类名来调用,获取的是类变量的值. 2.若类变量存在,成员变量不存在, 使用对象来调用的时候,它首先寻找成员变量, 如果

  • Python实现动态给类和对象添加属性和方法操作示例

    本文实例讲述了Python实现动态给类和对象添加属性和方法操作.分享给大家供大家参考,具体如下: 动态给类和对象添加属性 定义一个Person类 class Person(object): def __init__(self, name): self.name = name 给对象添加属性 # 创建2个Person,分别为p1,p2 p1 = Person('amy') print(p1.name) p1.age = 10 # 给p1对象添加属性 print(p1.age) # 输出10 p2

  • Python面向对象中类(class)的简单理解与用法分析

    本文实例讲述了Python面向对象中类(class)的简单理解与用法.分享给大家供大家参考,具体如下: 我们先来创建一个简单的类 class Fish(object): pass xiaoming = Fish() 一个基础类(base class) Fish(鱼)类就创建好了.class Fish(object)等同于class Fish() caoyu = Fish() 语句创建了一个对象:xiaoming(小明).变量名 = 类名+() 实例化 类 下面对Fish类进行扩充 class F

  • 详解Python类和对象内容

    目录 一.什么是Python类? 二.Python类中的方法和属性 2.1.Python类中的方法 2.2.Python类中的属性 三.面向对象的概念 3.1.Python类:继承 3.2.Python类:多态性 3.3.Python类:抽象 一.什么是Python类? python中的类是创建特定对象的蓝图.它使您可以以特定方式构建软件.问题来了,怎么办?类允许我们以一种易于重用的方式对我们的数据和函数进行逻辑分组,并在需要时进行构建.考虑下图. 在第一张图片(A)中,它代表了一个可以被视为C

  • 以SortedList为例详解Python的defaultdict对象使用自定义类型的方法

    目录 写在前面 第一种方法: 封装成函数 第二种方法: 类封装 写在前面 最近写周赛题, 逃不开的一种题型是设计数据结构, 也就是第三题, 做这种题需要的就是对语言中的容器以及常用排序查找算法的掌握, 而我只熟悉了最基本的一些方法, 做起这些题来总是超时… 为了搞定这些题, 我决定学习一下大佬们的做法, 特别是优先队列的方法维护有序容器以及有序列表等容器, 这些都在Python中封装好了, 用起来很是方便, 但是采用defaultdict的时候, 其缺省数据类型常常需要与题目给出的特定结构匹配,

  • 详解 Python 与文件对象共事的实例

    详解 Python 与文件对象共事的实例 Python 有一个内置函数,open,用来打开在磁盘上的文件.open 返回一个文件对象,它拥有一些方法和属性,可以得到被打开文件的信息,以及对被打开文件进行操作. >>> f = open("/music/_singles/kairo.mp3", "rb") (1) >>> f (2) <open file '/music/_singles/kairo.mp3', mode 'r

  • 详解Python解决抓取内容乱码问题(decode和encode解码)

    一.乱码问题描述 经常在爬虫或者一些操作的时候,经常会出现中文乱码等问题,如下 原因是源网页编码和爬取下来后的编码格式不一致  二.利用encode与decode解决乱码问题 字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312

  • 实例详解python函数的对象、函数嵌套、名称空间和作用域

    函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print('from f1') f1() #调用函数 print(f1) print('*'*50) f = f1 # 将函数名f1赋值给f f() # f也可以调用函数 print(f) from f1 <function f1 at 0x000001FB05534620> ************************************************** from f1 <func

  • Python 类和对象详细介绍

    目录 对象 = 属性 + 方法 self是什么 公有和私有 继承 调用未绑定的父类方法 使用super函数 多重继承 组合 构造和析构 _ _init_ _(self[, …])构造方法 _ _new_ _(cls[, …])方法 _ _del_ _(self)析构方法 什么是绑定 对象 = 属性 + 方法 我们前面其实已经接触过封装的概念,把乱七八糟的数据扔进列表里面,这是一种封装,是数据层面的封装:把常用的代码段打包成一个函数,这也是一种封装,是语句层面的封装:现在我们要学习的对象,也是一种

  • Python类和对象基础入门介绍

    目录 视频 Python 类和对象 创建和使用类 根据类创建实例 视频 观看视频 Python 类和对象 面向对象编程是编写表示现实世界中的事物和情景的类,并基于这些类来创建对象. 编写类时,你定义一大类对象都有的通用行为.基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性.使用面向对象编程可模拟现实情景,其逼真程度达到了令你惊讶的地步. 根据类来创建对象被称为实例化,这是能够使用类的实例. 面向对象最重要的概念就是类(Class)和实例(Instance),

  • 详解python metaclass(元类)

    元编程,一个听起来特别酷的词,强大的Lisp在这方面是好手,对于Python,尽管没有完善的元编程范式,一些天才的开发者还是创作了很多元编程的魔法.Django的ORM就是元编程的一个很好的例子. 本篇的概念和例子皆在Python3.6环境下 一切都是对象 Python里一切都是对象(object),基本数据类型,如数字,字串,函数都是对象.对象可以由类(class)进行创建.既然一切都是对象,那么类是对象吗? 是的,类也是对象,那么又是谁创造了类呢?答案也很简单,也是类,一个能创作类的类,就像

  • 详解python对象之间的交互

    先看看一般的类定义如下: class 类名: def __init__(self,参数1,参数2): self.对象的属性1 = 参数1 self.对象的属性2 = 参数2 def 方法名(self):pass def 方法名2(self):pass 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 #结果返回一个对象 对象名.对象的属

  • Python详解如何动态给对象增加属性和方法

    Python对象动态的增加属性和方法 前面我们了解到数据封装.继承和多态只是面向对象程序设计中最基础的3个概念. 在Python中,面向对象还有很多高级特性,允许我们写出非常强大的功能. python是动态语⾔,动态编程语⾔是⾼级程序设计语⾔的⼀个类别,在计算机科学领域已被⼴泛应⽤.它是⼀类在 运⾏时可以改变其结构 的语⾔ :例如新的函数.对象.甚⾄代码可以被引进,已有的函数可以被删除或是其他结构上的变化. 动态语⾔⽬前⾮常具有活⼒,例如,我们现在创建一个人的类,在这个类里面,定义了两个初始属性

随机推荐