零基础入门python3.7 ——基础知识总结(十九) 类的方法

既然类的属性可以分类。那么方法也可以分类。 类方法可划分为实例方法。 静态方法 和类方法。采用@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("小王")

小王

在实际编程中,几乎不会用到类方法和静态方法,因为完全可以使用函数代替它们实现想要的功能

 

你可能感兴趣的:(python)