前言:
现在兄弟们对“python函数和类的区别”大概比较看重,小伙伴们都想要学习一些“python函数和类的区别”的相关知识。那么小编在网络上搜集了一些关于“python函数和类的区别””的相关文章,希望姐妹们能喜欢,看官们一起来了解一下吧!在介绍python类与对象之前,首先需要了解面向过程编程和面向对象编程两种程序设计方法。面向过程编程OPP(Procedure Oriented Programming),是一种以事物为中心的编程思想,强调的是结构化编程,函数是程序设计的核心,函数调用是关键。而面向对象编程OOP(Object Oriented Programming),是一种以对象为基础的编程思想,对象为类的实例,一个对象中包含了数据和操作数据的函数。python语言属于面向对象编程。
image-20210822201107678
1 类
1.1 定义类
在Python中使用class关键字来定义类,后边紧跟类名,并以冒号结尾。类名命名通常采用大驼峰式命名法。类的特性之一是继承,可以继承一个或多个基类,基类都写在类名后边的括号中。python3中,如果定义一个类时,没有特别明确继承哪个基类,都默认继承object类。
小驼峰法
变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。譬如int myStudentCount;
大驼峰法
相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。常用于类名,函数名,属性,命名空间。譬如class DataBaseUser;
class 类名(基类列表): passclass DemoCode(object): '类的定义' pass
1.2 类属性
属性可以理解为变量,类属性可以理解为类的变量,类属性又分为私有和公有,私有属性只可在类的内部访问,外部无法访问,这点可以类比函数的全局变量和局部变量。公有类属性可以通过类和对象进行访问。
class DemoCode(object): name='tim' __age=18 #私有属性A=DemoCode() #类的实例化,创建对象。 print(DemoCode.name,A.name)#输出tim timprint(DemoCode.__age,A.__age)#报错,外部无法访问私有属性
1.3 类方法
方法可以理解为函数,类方法可以理解为类的函数,类方法要用装饰器@classmethod来标识。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,能够通过类和对象进行访问。
class DemoCode(object): name = 'tim' __age = 18 # 私有属性 @classmethod def getname(cls): return cls.nameA = DemoCode() # 类的实例化,创建对象。print(DemoCode.getname(), A.getname()) # 输出tim tim2 对象
2.1 创建对象
对象是类的实例,类是对象的模板。创建对象类似函数调用的方式,直接类名后加括号,括号内为对象的属性。
class DemoCode(object): passA = DemoCode() # 类的实例化,创建对象。
2.2 对象的属性
对象的属性就是对象的变量,也叫实例变量。python中一般采用def __ init __(self):的特殊方法来对对象属性进行初始化。对象的属性也有私有和公有之分,公有对象的属性只能通过对象进行访问。
class DemoCode(object): def __init__(self): self.name='tim' self.__age=18 #私有属性A = DemoCode() # 类的实例化,创建对象。print(A.name)#输出tim 18print(A.__age)#报错print(DemoCode.name)#报错
2.3 对象的方法
对象的方法就是对象的函数,也叫实例方法。其与普通函数的区别就是第一个参数必须是对象本身,一般以self表示。在对象的方法被调用的时候,不需要提供与self参数相对应的参数。对象的方法只能通过对象进行访问。
class DemoCode(object): def __init__(self): self.name='tim' self.__age=18 #私有属性 def getname(self): return self.name,self.__ageA = DemoCode() # 类的实例化,创建对象。print(A.getname())#输出tim 18print(DemoCode.getname())#报错3 其他
3.1 类的特性
封装封装的意思可以理解为隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口。类的定义就是封装,它把属性和方法都封装在内部,外界在访问的时候只需知道属性和方法的名字即可。
class DemoCode(object): name='tim' age=18 print(DemoCode.name)#通过类名.属性名的方式访问 print(name)#报错,外部无法直接访问继承继承就是从另一个类继承属性和方法,从而减少重复代码的编写。定义的新类称为子类,被继承的类称为基类、父类或超类。子类除了继承基类提供的属性和方法之外,还可以定义自己特有的属性和方法,所以子类比父类拥有更多的能力。
class DemoCode(object):#object就是所有类的基类 pass------------------------------class Person(object): passclass Student(Person):#继承person这个基类 pass多态多态就是多种形态,类作为模板只有一个,但是对象可以有多个,每个对象都有一种形态。
class Animal: def kind(self): print("i am animal")class Dog(Animal): def kind(self): print("i am a dog")class Cat(Animal): def kind(self): print("i am a cat")class Pig(Animal): def kind(self): print("i am a pig")----------------------d = Dog()#类的多态c = Cat()p = Pig()
3.2 公有和私有
公有属性和方法能被外界所访问。私有属性和方法只能在内部使用,不能被外界所访问。在私有属性和方法的名字前加上两个下划线__,就可以将属性和方法变成私有成员。
class DemoCode(object):#object就是所有类的基类 name='tim' __age=19 def __getname(self): return self.name
3.3 魔法方法
魔法方法是python内部已经定义好的,开头和结尾都有双下划线的方法。这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。python的魔法方法有很多,本文主要说一下__ init __ 方法,__ init __方法的作用就是对类的属性进行初始化,方便后续调用。
class DemoCode(object): def __init__(self,name,age): self.name=name self.age=age def getname(self): return self.name,self.ageA = DemoCode('tim',18) # 创建对象,自动执行类中的 __init__ 方法print(A.getname())#输出('tim', 18)
3.4 静态方法
静态方法可以理解为普通的函数,只不过定义在类的内部,由类进行调用。静态方法无默认参数,通过装饰器@staticmethod标识。
class DemoCode: @staticmethod def static_method(a,b,c): return(a+b+c)#调用方法DemoCode.static_method(1,2,3)#输出6
3.5 装饰器
@property@property装饰器的作用就是把类内方法当成属性来使用,也就是说之前是DemoCode.getname()的调用方法变为DemoCode.getname的方式。
class DemoCode: def __init__(self,name,age): self.name=name self.age=age @property def getname(self): return self.name,self.age #调用方法A = DemoCode('tim',18) # 类的实例化,创建对象。print(A.getname)#输出('tim', 18)print(A.getname())#报错@staticmethod@classmethod