A:实例方法:没有@classmethod和@staticmethod标记的方法是实例方法。假设这个有n个比传参数,类型调用的时候需要给n个参数传参。而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身;因为有这个规定,所以实例方法如果没有参数,则实例是无法调用的,但类型可以调用.
B:类方法:也叫类型方法,用@classmethod做标记的方法.假设其有n个必传参数,如果是类调用,则需要传n-1个参数,第一个参数同样是内定的类型本身。如果是实例调用,则需要传n个参数。类方法要让类型能调用,当然也需要至少一个参数.
C:静态方法:@staticmethod标记的方法。类和实例都可以调用。无内定的参数问题,方法有多少参数就必须传递多少参数。
当然,这里的参数忽略了缺省的参数
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2018/6/12 14:13
# @File : test_demo11.py
class A:
def __init__(self, x=0):
self.x = x
# 类实例方法
def foo(self, y=1):
print(self.x, y)
@classmethod
def class_foo(cls, x=1, y=1):
return cls(x)
@staticmethod
def static_foo(x=2):
return A(x)
a = A()
print('a.x------->', a.x)
a.foo()
# A.foo() # 错误,不能这么调用
print()
b = a.class_foo()
print(b.x)
b1 = A.class_foo()
print(b1.x)
print()
c = a.static_foo()
print(c.x)
c1 = A.static_foo()
print(c1.x)