Python实例方法, 类方法, 静态方法, 函数 小结

  •   不想访问 类内 和 实例内 的变量,用静态方法

  •   只想访问类内变量,不想访问实例变量,用类方法

  •   即要访问内变量,也想访问实例变量用实例方法

  •   函数与静态方法相同,只是静态方式的作用域定义在类内

实例方法:

语法:
    class 类名(继承列表):
        def 实例方法名(self, 参数1, 参数2, ...):
            '文档字符串'
            语句
作用:
    用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为


说明:
    1. 实例方法实质是函数,是定义在类内的函数
    2. 实例方法至少有一个形参有,第一个形参代表调用这个方法的实例,一般命名为 'self'

示例:

# # 此示例示意实例方法的创建和调用
class Dog:
    '''这是一种小动物的定义
    此类动物有吃(eat)的行为:

    '''
    def eat(self, food):
        '''此方法用来描述小狗吃的行为'''
        print("小狗正在吃:", food)

    def sleep(self, hour):
        print("小狗睡了%d小时" % hour)

    def play(self, obj):
        print("小狗正在玩:", obj)


dog1 = Dog()  # 调用构造函数创建一个实例对象 再用dog1变量绑定
dog1.eat('骨头')
dog1.sleep(1)
dog1.play('球')


dog2 = Dog()  # 创建另一个实例对象
dog2.eat('包子')
dog2.sleep(3)
dog2.play('飞盘')

类方法  @classmethod

类方法是用于描述类的行为的方法,类方法属于类,不属于类的实例

说明:
    类方法需要使用@classmethod装饰器定义
    类方法至少有一个形参,第一个形参用于绑定类,约定写为'cls'
    类和该类的实例都可以调用类方法
    类方法不能访问此类创建的实例的属性

示例:

# 此示例示意类方法的使用
class A:
    v = 0

    @classmethod
    def get_v(cls):  # cls 用来绑定调用此方法的类
        return cls.v  # 访问类变量

    @classmethod
    def set_v(cls, value):
        cls.v = value


print(A.get_v())  # 0
A.set_v(100)
print(A.get_v())  # 100
a1 = A()  # 创建实例
print("a1.get_v() =", a1.get_v())  # 100
a1.set_v(200)
print("a1.get_v() =", a1.get_v())  # 200
print('A.get_v() =', A.get_v())

静态方法  @staticmethod

静态方法是定义在类内部的函数,此函数的作用域是类的内部

说明:
    静态方法需要使用 @staticmethod装饰器定义
    静态方法与普通函数定义相同,不需要传入self实例参数和cls参数
    静态方法只能凭借该类或类创建的实例调用
    静态方法不能访问类变量和实例变量(属性)

示例:

#示意静态方法创建与调用
class A:
    @staticmethod
    def myadd(a, b):
        return a + b


print(A.myadd(100, 200))  # 300
a = A()  # 创建实例
print(a.myadd(300, 400))  # 700

猜你喜欢

转载自blog.csdn.net/py_1995/article/details/84112326
今日推荐