既然类的属性可以分类。那么方法也可以分类。 类方法可划分为实例方法。 静态方法 和类方法。采用@classmethod 装饰的方法称之为类方法。 用 @staticmethod 装饰的称之为静态方法。不做任何装饰的称之为实例方法。
一。实例方法定义在类中的默认方法都属于实例方法。 包括构造方法也属于一个特殊的实例方法
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
实例方法最大的特点是包含一个self参数。用于绑定调用此方法的实例对象。通常情况下通过类对象直接调用
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
a = Person()
print(a.name)
('王小明',)
可以通过类名调用实例方法。但是需要手动绑定self参数
class Person:
def __init__(self):
self.name = "王小明",
self.age = 20,
self.city = '成都'
def getName(self):
return self.name
a = Person()
print(Person.getName(a))
('王小明',)
通过类名调用时如果不绑定self参数会抛出异常
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'
self完全可以任意传入一个参数。但是胡乱的给 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("小王")
小王
在实际编程中,几乎不会用到类方法和静态方法,因为完全可以使用函数代替它们实现想要的功能
雯倾浅忆
原创文章 39获赞 177访问量 4万+
关注
私信
展开阅读全文
作者:雯倾浅忆