一.概念
1.类:拥有一群相同【特征 】或者【行为】的事物的统称
特征:就是一个变量,在类中又称之为 【属性】 。
行为:就是一个函数,在类里又称之为 【方法】 。
2.对象:由一个【类】 创建出来的,且拥有这一类中定义的属性和方法。
3.类与对象:
1)类相当于是一个统一的模板,而对象就是依据这个模板制造(创建出来)的具体的东西。
2) 一个类可以创建出诸多对象。
3)对象拥有类的所有属性和方法。
4)不同的对象,对应的属性值不同。
二.创建
1.定义类名-->确定类的属性和方法
1)定义类
语法:class 类名(object):#类名要遵守大驼峰命名法,(object)亦可以省略
def 方法1(self,参数列表):#这里若是没有参数,也必须要有self,这是默认的,且在第一个
pass
........
def 方法n(self,参数列表):#方法的定义格式与函数的一样,这里的self(那个对象调用这个方法,这个self就指谁),在后面调用对象的这个方法时就时通过 【self.方法名()】
pass
对象变量名=类名()#创建一个实例化对象,一个对象变量名为一个对象
对象变量名.方法名()#此后对该对象进行操作,调用类中方法
2)确定属性,添加属性
语法:class 类名(object):
def __init__(self,属性1,属性2,.....): #使用__init__方法来对类的属性初始化,self不可省略,且位于第一个
self.变量名=属性 #此后类中的方法调用属性都要写出self.变量,该变量名可自我设置
在创建好一个对象后,可以直接给对象【添加属性】:
语法: 对象名=类名()
对象名.属性名=属性值 #但是一般不用这种方式
三.类属性
1.概念:
类对象所拥有的属性,类属性可以通过类对象或者实例化对象访问
语法:class 类名(object):
变量名A=值 #该处的A就是公有类属性
2.实例属性:
通过类创建的对象--【实例对象】,【对象属性】又称为【实例属性】
3.相较于实例属性:
1)实例对象的属性根据对象的不同,其数据也不尽相同。而类属性是保持不变的。
2)实例属性要求每个对象为其单独开辟一段内存,而类属性是全类共用,仅占一份内存。
4.注意:
1)尽量避免类属性与实例属性同名,否则,实例对象会优先访问实例属性。
2)类属性只能通过类对象修改,实例对象无法修改类属性
3)类属性可私有:
语法:__变量名=值 #此处的__变量名即为私有类属性(此处为两个下划线【_】)
四.类方法:
1.概念:
第一个形参是类对象的方法
2.操作:
需要用装饰器@classmethod来标识其为类方法一般以cls作为第一个参数。
语法:
class 类名(object):
类属性=值 #此处定义类属性
@classmethod #类方法必须要使用装饰器来修饰
def get_变量名(cls):# cls is 类名 -->为True
return cls.类属性名
print(类名.get_变量名())
语法:
class 类名(object):
类属性=值
def __init__(self,name):
self.name=name
使用:1.当方法总需要使用类属性(如访问私有属性等),定义类方法。
2.类方法一般和类属性配合使用
五.静态方法
1.使用情景:
在方法中既不需要使用【实例对象】,也不需要使用【类对象】时,定义【静态方法】。
2.优点:
取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。
3.概念:
静态方法既不需要传递类对象,也不需要传递实例对象(形参没有self或者cls)。
但是静态方法也能通过实例对象和类对象去访问。
4.操作:
语法:
class 类名(object):
def __init__(self):
name=None #类中没有属性
@staticmethod #使用装饰器来进行修饰
def 方法1(): #静态方法不会自动传递实例对象和类对象
pass
@staticmethod #每定义一个方法,都要有装饰器
def 方法2():#当方法1和方法2同名时,调用方法会执行最后定义的方法,即最后调用的结果会显示方法2的结果
pass
p=类名()
类名.方法名()#用实例对象来调用
p.方法名()#用类对象来调用
语法:【类方法和静态方法叠用】
class 类名(object):
类属性=值
def __init__(self,name):
self.name=name
#访问类属性
@classmethod #类方法
def 变量名1(cls):
print(cls.类属性)
#静态方法打印字符串
@staticmethod #静态方法
def 变量名2():
print('字符串')
p=类名("zhangsan")
p.变量名2()