Python是面向对象编程吗,python是一种面向对象的编程语言
Python也是一种面向对象的编程语言。现在,让我们进入Python的面向对象编程世界。但是,正式用python进行面向对象编程时,需要先了解python类的知识。
类是实现Python支持继承的新型对象的组件,也是Python面向对象编程(OOP)的主要工具。
使用名为class statement的新语句在PYthon中创建一个类。
1.面向对象有三个特点:
包装软件
继承人
多态性
2.什么是课?
类:描述相同属性和方法的对象的集合。定义集合中每个对象共有的属性和方法。对象是类的实例。总而言之,类是包含大量使用内置对象类型进行处理的函数的包。类旨在创建和管理对象并支持继承。这就是代码定制和重用的机制。
从具体编程的角度来看,类是Python的程序组件,而类是封装逻辑和数据的另一种方式,就像我们前面提到的函数和模块一样。类有三个重要的独特之处,这在创建新对象时非常有用。
多个实例
类基本上是创建对象的工厂。每次调用该类时,都会生成一个具有独立命名空间的新对象。由类生成的每个对象都可以读取类的属性,并获取每个对象的命名空间存储数据。
通过继承定制
类还支持OOP继承。您可以通过在类外重新定义属性或添加没有属性的方法来扩展类。更一般地说,类可以创建命名空间的层次结构。该层次结构定义了由该结构中的类创建的对象所使用的变量名。从类生成的所有实例都继承该类的所有属性和方法。
操作员过载
通过提供特定的协议方法,类可以定义响应某些内置操作的对象。例如,从类创建的对象可以被切片、级联和索引。Python提供了几个钩子,可以在类中用来中断和实现任何嵌入式操作。
3.班级安排
使用class语句创建一个新类。Class后跟类名、括号中的基类(可以有多个基类)和一个冒号。
classclassname(基类,) :
optionalclassdocumentstring #类的文档字符串。
Class_suite # class
Class_suite由类成员、方法和数据属性组成。
可以在ClassName中找到该类的帮助信息。__doc__。
类定义实例:
#!/usr/俊逸的发卡/python
#编码=utf-8
类封装(对象):
#所有员工基本类别
empCount=0
def __init__(自己,姓名,薪金) :
#类的构造函数
self.name=name
self.salary=薪水
Employee.empCount=1
Defdisplaycount(从):
#类方法
打印“员工总数”,员工人数
efdisplayemployee(自己) :
打印姓名: ,自我.姓名,,薪金: ,自我.薪金
描述:
EMP变量是一个类变量,也称为静态变量,它的值由该类的所有实例共享。您可以在内部类或外部类中使用Employee.empCount来访问它。
第一个init))方法用作该类的构造函数或初始化方法,每次创建该类的实例时都会调用该方法。如果没有显示该方法的定义,默认情况下将给出一个空方法。
类中参数的self表示实例本身,相当于java的this指针。另外,类中的所有方法都需要self,必须写在第一个参数位置。
所有类都继承基类对象。
4.创建实例对象。
要创建类的实例,可以使用类名并接受__init__方法中的参数。
为类创建一个特定的对象。每次从类中生成实例时,Python都会自动调用一个名为__init__(也称为类的生成方法)的方法来初始化数据。新实例照常传递给__init__的self参数。此方法也由类继承。
如果您想在上面的类中创建一个实例:
EMP1=雇员( Joy ,10000).
EMP2=雇员( Sr ,10000)))))))).
如果定义的类没有要初始化的参数,则在创建实例时不需要传递参数。
5.类别变量
Python的类变量也叫类的静态成员变量,类变量在整个实例化对象中是公共的。类定义在类内,函数外。类变量通常不用作实例变量,它们的值在这个类的所有实例中共享。
在类名后面紧接着定义一个类,相当于java和c。
静态变量
例子是在__init__中定义的,相当于java和c中常见的变量。
类父(对象):#定义父类
parentAttr=100
def __init__(self):
打印调用父构造函数
ParentAttr变量是一个类变量。
6.示例变量
变量在__init__中定义,相当于java和C的通用变量,只作用于当前类的实例。变量前面需要有self关键字。比如:
类别人员(对象):
Id=12 #类静态成员在这里定义,注意缩进。
def __init__(self,name):
self . name=name # class的实例变量
自我。__inName=ads #类的实例变量
在类的实例方法中定义的变量称为局部变量。
7.类方法和静态方法
类和静态方法是这样的。当它们被调用时,不需要生成类的实例进行调优,而是可以直接使用类的名称进行调优。
但它们也是不同的:类方法传递参数时,需要传入类本身的一个实例(cls,指向类本身),而静态方法不需要传递任何实例,只需要普通的参数。
类别人员(对象):
Id=12 #类静态成员在这里定义,注意缩进。
def __init__(self,name):
self.name=name
自我。__inName=ads
@classmethod #类方法定义,用注解解释。
Up (cls,A): #这是cls,不是赛尔夫。
打印cls,cls。__姓名_ _
返回1
@staticmethod #类静态方法定义,用批注解释。
Def down( b): # self,静态方法不需要cls变量
id=13
返回b-1
调用:
打印Person.up(20)
打印个人资料(15)
8.方法重载
有时,我们可能需要在同一个类中定义几个功能相似但参数不同的方法。
方法重载允许多个方法在一个类的定义中使用相同的方法名。
如果你学过C、JAVA或者其他面向对象编程语言,你会发现Python中的重载和其他面向对象编程语言是不一样的。其实可以说Python在形式上是不支持重载的。让我们以JAVA为例来解释方法重载。
重载意味着一个方法名被用来在同一个类中定义多个方法。
方法重载是面向对象编程语言多态性的一种形式,实现了java的编译时多态性,即编译器在编译时决定调用哪个重载的方法。函数重载大大提高了代码重用率和程序员开发效率。
重载方法的名字不同,但是方法的声明中必须有不同的元素,这样编译器才能区分这些方法。因此,JAVA中重载的方法必须遵循以下原则:
方法的参数表必须不同,包括参数的类型或个数,以区分不同的方法体;
方法的返回类型和修饰符可以相同,也可以不同。
public void println()
公共void println(字符x)
public void println(char x,int x)
(1).Python方法重载
对于Python,虽然它不正式支持函数重载。但Python也是面向对象的语言,自然不会丢弃函数重载的特性。Python中实现函数重载的方法很特别。首先,Python本身就是一种动态语言,一个方法的参数是无类型的。只有通过调用传递值才能确定参数的类型,所以通过参数类型的不同来实现函数重载是不可行的。那么如何实现Python的重载呢?
类型不行,就按参数个数来试吧。在Python中,一个好函数的参数个数是函数的默认参数。
过载机制可用于定义如下:
def println(str1,time=1):
打印str1 *时间
通过设置默认参数,可以在Python中实现函数重载。
(2).Python运算符重载(重写)
在Python中,运算符重载的方式非常简单。默认情况下,每个类都有一些内置的操作方法。只需要重写这个方法来实现这个运算符的重载。例如,下面是一个重载加法运算:
类别向量(对象) :
def __init__(self,a,b):
self.a=a
self.b=b
def __str__(self):
返回“Vector (%d,% d)%(self . a,self.b)
def __add__(自身,其他) :
返回向量(self.a other.a,self.b other.b)
x=向量(3,7)
y=向量(1,-10)
打印x y
执行结果:
向量(4,-3)
上述范例会覆写类别的加法运算,您也可以覆写其他方法。
9.方法重写
在类层次结构中,当子类的成员变量与父类的成员变量同名时,子类的成员变量隐藏父类的成员变量;当子类的方法与父类具有相同的名称、参数列表和返回值类型时,子类的方法覆盖父类的方法,并且父类中定义的方法是隐藏的。“隐藏”是指子类中与父类同名的变量和方法通过子类调用时,操作就是这些变量和方法在子类中定义。通过隐藏成员变量和重写子类的方法,可以将父类的状态和行为改变成自己的。
Override意味着子类覆盖父类的成员方法。子类可以更改为父类方法实现的函数,但子类中被覆盖的方法必须与父类中相应的方法具有相同的返回值、方法名和参数列表。也就是说,要实现重写,必须有继承。
该方法超越了必须遵守的原则:
子类中重写方法的返回值类型必须与父类中重写方法的返回值类型相同。
不能减少子类中重写方法的访问权限。
子类中的重写方法不能抛出新的异常。
方法重写是真实对象运行时多态性的基础。
类别:
类形状(对象):
def __init__(self,x):
self.x=x
self.rx=10
定义区域(自身,x):
及格
类(继承的形状类):
类圆(形状):
def __init__(self,x):
#超级(圈,自我)。__init__(x)
#形状。__init__(self,x)
及格
定义区域(自身,x):
打印圆圈内
返回3.14 * x ** 2
类继承shape类,并重写父类的构造方法和面积查找方法。而当子类覆盖父类构造方法时,父类方法作为基础,子类只是对其做一个扩展。此时会调用父类构造方法。有三种方法:
方法一:(更灵活)
超级(圈,自我)。__init__(x)方法二:Shape。__init__(self,x)方法三:当子类没有定义自己的构造函数时,默认会调用父类的构造函数。
注意:
Super只能用于构造方法。
如果你的父类不能满足你的需要,你可以在子类中覆盖父类的方法。常见的重写父类方法有:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。