11.静态方法和类方法
一 静态方法 @staticmethod
格式:
class 类名:
@staticmethod #这是一个装饰器
def 方法名(形参):
方法体
调用格式:
类名.方法名(实参)
对象名.方法名(实参)
使用@staticmethod 进行修饰,静态方法没有self,cle 参数的限制
静态方法与类无关,可以被转换成函数使用
class Person(object):
@staticmethod #静态方法
def study(name):
print(f"{name}会学习")
#可以使用对象访问也可以使用类访问
Person.study("xiaowu") #使用类访问
#pe = Person() #实例化对象访问
# pe.study()
应用场景静态方法:
1.不需要类属性,类方法可以使用静态方法,取消不必要的参数传递,有利于减少内存占用和性能消耗
2.不需要访问实例对象,实例属性,创建实例
二:类方法 @classmethod
类有三种定义方法1.实例方法,2.静态方法,3.类方法
对于类对象,第一个参数那必须是类对象,一般以cls作为第一个参数。
格式:
class 类名:
@classmethod #这是一个装饰器
def 方法名(cls,形参):
方法体
class Person(object):
name = "xiaolan" #类属性
@classmethod
def sleep(cls):
print("人在睡觉")
print("cls:",cls) #cls代表类对象本身,类本质上就是一个对象 cls: <class'__main__.Person'>
print(cls.name)
Person.sleep() #调用
print(Person)# <class'__main__.Person'>
类方法内部可以访问类属性,或调用其他方法
应用场景类方法:
1.当方法中需要使用到类对象(如访问私有类属性等),定义类方法
2.类方法一般配合类属性使用
三:新式类
class A(): 经典类
class A(object): 新式类:继承了object类或者该类的子类都是新式类 ---推荐使用
object --- 对象,python为所有对象提供的基类(顶级父类),提供了一些内置的属性和方法,可以使用dir()查看
python3 中一个类没有继承任何类,则默认继承object类,因此python3都是新式类,python2一个类没有继承任何类,也不会继承object类 ,只有python2版本才有经典类
四:总结三大方法
1.实例方法:方法内部访问实例属性,方法内部可以通过类名.属性名来访问类属性
2.静态方法@staticmethod:方法内部,不需要访问实例属性和类属性 没有形参限制,
如果要访问类属性,通过类名.类属性名访问,不能访问实例属性
3.类方法通过@classmethod:方法内部只需要访问类属性,可以通过cls.类属性名,不能访问实例属性,cls代表类本身
类属性是公共的,所有方法内部都能够访问到,静态方法不需要访问类属性,因为静态 方法和类、对象没有关联,实例属性是私有的,只有实例方法内部能够访问到
浙公网安备 33010602011771号