既然类的属性可以分类。那么方法也可以分类。 类方法可划分为实例方法。 静态方法 和类方法。采用@classmethod 装饰的方法称之为类方法。 用 @staticmethod 装饰的称之为静态方法。不做任何装饰的称之为实例方法。
定义在类中的默认方法都属于实例方法。 包括构造方法也属于一个特殊的实例方法
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
a = Person()
print(a.name)
('王小明',)
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
a = Person()
print(Person.getName(a))
('王小明',)
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
a = Person()
print(Person.getName())
Traceback (most recent call last):
File "/Users/apple/Documents/重要文件/python3/python21.py", line 10, in
print(Person.getName())
TypeError: getName() missing 1 required positional argument: 'self'
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
a = Person()
Person.getName("python")
哈哈
用类的实例对象访问类成员的方式称为绑定方法,而用类名调用类成员的方式称为非绑定方法。
类方法和实例方法相似。 也需要至少包含一个参数。这个参数的名称不再是self而是cls,python会讲类本身自动的绑定到cls上,注意不是类的实例对象。而这个参数也是约定俗成的。
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@classmethod
def add(cls):
print("这是一个类方法")
如果没有@classmethod那么其就是一个实例方法
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@classmethod
def add(cls):
print("这是一个类方法")
Person.add()
这是一个类方法
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@classmethod
def add(cls):
print("这是一个类方法")
a = Person()
a.add()
这是一个类方法
静态方法实际上就是普通的函数。 只是定义空间不同而已。 静态方法是定义在类这个空间里的。 而函数是定义在全局函数里的,静态方法也没有self,cls这样的特殊参数。python不会要求绑定任何的类或对象。正因为如此类方法中无法调用任何类方法和类属性。
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@staticmethod
def add(name):
print(name)
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@staticmethod
def add(name):
print(name)
Person.add("小王")
小王
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
print("哈哈")
@staticmethod
def add(name):
print(name)
a = Person()
a.add("小王")
小王
在实际编程中,几乎不会用到类方法和静态方法,因为完全可以使用函数代替它们实现想要的功能