1、普通方法:
class MyClass:
"""A simple example class"""
i = 12345
def f1(c):
return str(c) + 'hello world'
def f2():
return 'hehe'
m = MyClass()
print(m.f1()) #输出 <__main__.MyClass object at 0x07698270>hello world
print(m.f2()) #报错 f2() takes 0 positional arguments but 1 was given
print(MyClass.f1()) #报错 f1() missing 1 required positional argument: 'c'
print(MyClass.f2()) #输出hehe
类中定义的普通方法,
如果带了一个或多个参数,不管第一个参数是否叫self,都会被作为实例本身的引用,所以只能用实例名加.的方式访问;
如果没有带参数,只能使用类名加.的方式访问。
2、classmethod修饰的方法
class MyClass:
"""A simple example class"""
i = 12345
@classmethod
def f1(c):
return str(c) + '\thello world'
@classmethod
def f2():
return 'hehe'
print(MyClass.f1())#可以用类名加.的方式调用
m = MyClass()
print(m.f1())#也可以用实例名加.的方式调用
print(MyClass.f2())#报错 TypeError: f2() takes 0 positional arguments but 1 was given
m = MyClass()
print(m.f2())#报错 TypeError: f2() takes 0 positional arguments but 1 was given
加了@classmethod的方法,至少要有一个参数,不然没有意义,被调用时会报错;
带一个或多个参数时,第一个参数会作为类本身的引用,所以能用实例名加.的方式调用,也能使用类名加.的方式调用。
3、staticmethod修饰的方法
class MyClass:
"""A simple example class"""
i = 12345
@staticmethod
def f1(c):
return str(c) + '\thello world'
@staticmethod
def f2():
return 'hehe'
print(MyClass.f1(2))#可以用类名加.的方式调用
m = MyClass()
print(m.f1('tom'))#也可以用实例名加.的方式调用
print(MyClass.f2())#可以用类名加.的方式调用
m = MyClass()
print(m.f2())#也可以用实例名加.的方式调用
#加了@staticmethod的方法,跟最普通的类外函数一样,参数也是作为普通参数看待,不代表类也不代表实例。所以能用实例名加.的方式调用,也能使用类名加.的方式调用。