class ClassName:
def method(self):
# self参数指向实例化对象
pass
@classmethod
def classmethod(cls):
# cls参数指向classname类对象
pass
@staticmethod
def staticmethod():
# 无须 `cls`或`self`这类固定参数
# 但不是说没有,只是定义的参数无特殊的指定对象,参数为普通的参数
pass
实例方法
格式:第一个参数为实例对象,参数名一般约定为
self
,self
参数代表的是当前类的实例后的实例化对象。
参数self
指向实例化后的对象,通过参数self
来传递实例化对象的属性和方法
调用:只能由实例对象调用,故调用前必须先实例化,然后通过实例对象调用例如:
先实例化类
myclass = ClassName()
然后 通过对象myclass
调用
myclass.method()
其中method
的self
指向刚实例化的myclass
对象
不可以直接通过ClassName.method()
访问 ,会报错
实例完整代码
class ClassName:
name = 'name'
def method(self):
self.name = 'method'
print(self.name)
myclass = ClassName()
print(myclass.name)
myclass.method()
print(myclass.name)
输出结果为:
name
method
method
类方法
定义:使用修饰器
@classmethod
修饰后的函数第一个参数必须是当前类对象。该参数名一般约定为cls
。
cls
指向类本身,不能通过它访问实例化对象的方法和对象,只能访问类的静态方法和静态属性。
通过它来传递类的属性和方法(不能传实例化对象的属性和方法);
调用:实例对象和类对象都可以调用,无差别,但两种调用方式类方法访问的都是类的属性和方法例如:
实例化后可以myclass.classmethod()
又或者可以直接类名调用ClassName.classmethod()
输出结果都一样
实例及完整代码
class ClassName:
name = 'name'
def __init__(self):
# 实例化后的name
self.name = 'Bile'
@classmethod
def classmethod(cls):
print(cls.name)
pass
myclass = ClassName()
myclass.classmethod()
ClassName.classmethod()
结果都是:name
print(myclass.name) 输出的则是Bile
静态方法
定义: 使用装饰器
@staticmethod
。参数随意,不需要self
和cls
参数,可以有,但并不是类方法和实例方法的self
和cls
有实际指定的对象,只是一个普通的参数,无特殊意义
调用:实例对象和类对象都可以调用,无差别。但不能访问类或者实例的属性和方法(因为没有cls
,self
参数)一般都是直接通过类名来调用,不实例化,与函数类似。一般少用静态方法
class ClassName:
name = 'name'
def __init__(self):
# 实例化后的name
self.name = 'Bile'
def method(self):
self.name = 'method'
print(self.name)
@classmethod
def classmethod(cls):
print(cls.name)
pass
@staticmethod
def staticmethod(param='static'):
print('this is ', param)
ClassName.staticmethod()
ClassName.staticmethod('static method')
输出:
this is static
this is static method