类方法和静态方法 | 学习笔记

简介: 快速学习类方法和静态方法,介绍了类方法和静态方法系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Python 入门 2020年版类方法和静态方法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10381


类方法和静态方法

 

内容介绍:    

一、 对象方法

二、 静态方法

三、 类方法

 

一、对象方法

对象方法可以用实例对象来调用也可以用类对象来调用,如用使用实例对象调用实例对象直接指的就是实例对象,如果使用类对象调用需要手动的给 self 传递参数。

1.实例对象调用

在 python 里有一些重要的类方法和静态方法

class Person(object):

def _init_(self,name,age):

self.name = name

self.age = age

def eat(self, food) :

print(self.name + "正在吃'+food)

p1 = Person('张三’,18)

# 实例对象在调用方法时,不需要给形参 self 传参,会自动的把实例对象传递给 self

P1.eat(‘红烧牛肉泡面’)   # 直接使用实例对象调用方法

p2 = Person(‘李四’,19)

类里面有一个方法叫 eat 方法,实例对象在调用方法时不需要给形参 self 传参,会自动的把实例对象传递给 self。

image.png

函数存在一个内存,内存中有一个 person 类, person 类指向一块内存空间。创建一个 p1 对象,对象里存放一个 name:张三、age:18,这个属性叫实例属性是每一个对象都会保存的。

内存中还有一个方法叫 eat 方法,这个方法存在 person 类中。如果创建一个 p2对象存放 name:李四、age:19,他也没有存放 eat 方法。

2.类对象调用

class Person(object):

def _init_(self,name,age):

self.name = name

self.age = age

def eat(self, food) :

print(self.name + ‘正在吃'+food)

p1 = Person('张三,18)

# 实例对象在调用方法时,不需要给形参 self 传参,会自动的把实例对象传递给 self

P1.eat(‘红烧牛肉泡面’)   # 直接使用实例对象调用方法

p2 = Person(‘李四’,19)

print(p1.eat)

print(p2.eat)

print(p1.eat is p2.eat)

image.png

输入 print(p1.eat is p2.eat) 打印显示 false 发现他们并不是一个函数。

在这里有一个绑定的操作: bound method ,这个方法没有自己保存也没有用同一个方法,这个方法与每一个实例对象都进行了绑定,不同的对象绑定不同的方法。

class Person(object):

def _init_(self,name,age):

self.name = name

self.age = age

def eat(self, food) :

print(self.name + ‘正在吃'+food)

p1 = Person('张三,18)

# 实例对象在调用方法时,不需要给形参 self 传参,会自动的把实例对象传递给 self

P1.eat(‘红烧牛肉泡面’)  # 直接使用实例对象调用方法

p2 = Person(‘李四’,19)

#print(p1.eat)

#print(p2.eat)

#print(Person.eat)

Person.eat(‘西红柿鸡蛋盖饭’)

image.png在打印 person 

eat 之后每一个都有 eat 方法但地址都不一样,所以 person 也能访问 eat 方法。

class Person(object):

def _init_(self,name,age):

self.name = name

self.age = age

def eat(self, food) :

print(self.name + "正在吃'+food)

p1 = Person('张三’,18)

# 实例对象在调用方法时,不需要给形参 self 传参,会自动的把实例对象传递给 self

p2 = Person(‘李四’,19)

# eat 对象方法,可以直接使用实例对象.方法名(参数)调用

# 使用对象名.方法名(参数)调用的方式,不需要传递 self

# 会自动将对象名传递给 self

p1.eat('红烧牛肉泡面)  # 直接使用实例对象调用方法

# 对象方法还可以使用类对象来调用类名.方法名()

# 这种方式,不会自动给self传参,需要手动的指定self

Person.eat(p2,‘西红柿鸡蛋盖饭)

image.png

输入 Person.eat(‘西红柿鸡蛋盖饭’) 运行之后会发现系统崩溃,报错显示 eat() 中缺少‘food’参数。 eat 对象方法,可以直接使用实例对象.方法名(参数)调用使用对象名.方法名(参数)调用的方式,不需要传递 self 会自动将对象名传递给 self 对象方法还可以使用类对象来调用类名.方法名()这种方式不会自动给 self 传参,需要手动的指定 self

他的作用是当 eat 时并不是实例对象调用而是用类对象调用。如果使用实例对象调用他会自动把实例对象传给 self ,但是如果使用类对象调用则不会传给 self ,需要手动给 self 传递一个参数,例如 Person.eat(p2,‘西红柿鸡蛋盖饭) 则会把 p2 传给 self ,现在则会显示李四正在吃西红柿鸡蛋盖饭。

 

二、静态方法

1.调用静态方法

class Person(object):

def __init__(self,name,age):

self.name = name

self.age = age

def eat(self,food):  # 对象方法有一个参数self,指的是实例对象

print(self.name +‘正在吃’+food)

# 如果一个方法里没有用到实例对象的任何属性,可以将这个方法定义staticmethod

@staticmethod

def demo():  # 默认的方法都是对象方法

print( ‘ hello’)

# 静态方法:没有用到实例对象的任何属

Person.demo()

p1.demo()

创建一个 demo 方法,默认的方法都是对象方法,但是在打印一hello之后会发现 demo 方法下会出现一个波浪线。

对象方法有一个参数 self ,指的是实例对象,如果要使用 name 属性那这个方法就要定义成对象方法,如果一个方法里没有用到实例对象的任何属性,可以将这个方法定义 static

这个方法不需要用到实例对象里的任何属性,那么这个方法是一个静态方法。静态方法可以用类调用也可以用实例对象调用,他没有用到实例对象的任何属性。 

2.静态方法的使用

class Calculator(object):

def _init_(self, m,n):

self.m =m

self.n = n

@staticmethod

def add(a,b):

return a + b

@staticmethod

def minus(a,b):

return a – b

@staticmethoddef

def mul(a,b):

return a * b

# c = CaLculator(100,200)

# c.add(12)

Calculator.add(1,4)

Calculator.minus(9,2)

面向对象的方法首先要有类,根据类来创建一个对象。很多时候只需要用到类,不需要创建对象。

定义一个计算器,如果想调用这个方法必须先创建一个对象,但让如果是静态方法可以直接用类来调用这个方法。在调用静态方法时可以创建一个对象再用对象调用 add 方法,但在函数的方法内部实现里没有用到任何创建的实例对象。

面向对象的关注点是让谁来做,相当于把多个函数打包放到了一个类里,然后通过类名调用。

 

三、类方法

class Person(object):

type = ‘human‘

@classmethod

def test(cls):   # 如果这个函数只用到了类属性,我们可以把定义成为一个类方法

# 类方法会有一个参数cls,也不需要手动的传参,会自动传参

# cls指的是类对象cls == Person ==> True

print( 'yes')

如果这个函数只用到了类属性,可以把它定义成为一个类方法。类方法可以使用实例对象和类对象调用。

类方法会有一个参数 cls ,也不需要手动的传参,会自动传参cls 指的是类对象,这里的 cls 就是 person。

相关文章
|
2月前
|
Java
静态方法和实例方法的区别是什么?
静态方法和实例方法的区别是什么?
295 5
|
1月前
|
Python
深入理解Python中的类方法、类实例方法和静态方法
深入理解Python中的类方法、类实例方法和静态方法
21 0
|
1月前
|
Python
深入理解Python中的类方法、类实例方法和静态方法
深入理解Python中的类方法、类实例方法和静态方法
15 0
|
3月前
|
存储 Java 程序员
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
73 4
|
Java
Java 类(私有属性、对象方法、类方法,构造函数)
Java 类(私有属性、对象方法、类方法,构造函数)
119 0
|
设计模式 安全 Java
Python面向对象、继承的基本语法、单继承和多层继承、子类重写父类的同名方法、子类调用父类的同名方法、继承中的 init 、 多继承、私有权限、类属性、类方法、静态方法、多态、鸭子类型
称为类 B 继承类 A 特点: B类的对象可以使用 A类的属性和方法 优点: 代码复用.重复相同的代码不用多次书写. 名词: 类A: 父类 基类 类B: 子类 派生类 2. 单继承和多层继承[理解] 单继承: 如果一个类只有一个父类,把这种继承关系称为单继承 多继承: 如果一个类有多个父类,把这种继承关系称为多继承 多层继承: C–> B --> A 3. 子类重写父类的同名方法[掌握] 重写: 子类定义和父类名字相同的方法. 为什么重写: 父类中的方法,不能满足子类对象的需求,所以
535 1
Python面向对象、继承的基本语法、单继承和多层继承、子类重写父类的同名方法、子类调用父类的同名方法、继承中的 init 、 多继承、私有权限、类属性、类方法、静态方法、多态、鸭子类型
|
开发者 Python
类方法和静态方法 | 学习笔记
快速学习类方法和静态方法,介绍了类方法和静态方法系统机制, 以及在实际应用过程中如何使用。
类方法和静态方法 | 学习笔记
|
开发者 Python
类方法和静态方法回顾|学习笔记
快速学习类方法和静态方法回顾
类方法和静态方法回顾|学习笔记
|
开发者 Python
图解静态方法和类方法 | 学习笔记
快速学习 图解静态方法和类方法
图解静态方法和类方法 | 学习笔记
|
C++
C++类的静态方法
C++类的静态方法
82 0
下一篇
无影云桌面