注册 登录

清河洛

Python中的静态方法和类方法

qingheluo2018-11-21清河洛708
静态方法一般情况下我们在类中定义方法时第一个参数是self,也就是将该方法和该实例对象绑定,这样该方法就可以通过实例对象进行访问但是有些情况下我们需要在创建时进行一些必要的前提操作,如参数检测等,此时对象尚未创建,不能使用对象的方法来操作我们可以使用__init__()方法进行必要的前提操作,我们也可以使用静态方法来完成该操作python中使用@staticmethod修饰符对静态方法进行修饰,并且静态方法不需要第一个参数self使用ClassName.func()来调用静态方法不使用@staticmethod修饰符的第一个参数不为self的方法也可以使用ClassName.func()...

静态方法

一般情况下我们在类中定义方法时第一个参数是self,也就是将该方法和该实例对象绑定,这样该方法就可以通过实例对象进行访问

但是有些情况下我们需要在创建时进行一些必要的前提操作,如参数检测等,此时对象尚未创建,不能使用对象的方法来操作

我们可以使用__init__()方法进行必要的前提操作,我们也可以使用静态方法来完成该操作

python中使用@staticmethod修饰符对静态方法进行修饰,并且静态方法不需要第一个参数self

使用ClassName.func()来调用静态方法

不使用@staticmethod修饰符的第一个参数不为self的方法也可以使用ClassName.func()调用,但是该类的实例对象不能使用该方法,使用了修饰符后实例对象也可以使用该方法

以下例子为获取三角形周长,在创建对象之前对三条边进行检测,判断是否可以组成三角形

class Perimeter(object):

    def __init__(self, a, b, c):
        self._a = a
        self._b = b
        self._c = c

    @staticmethod
    def is_valid(a, b, c):
        return a + b > c and b + c > a and a + c > b

    def value(self):
        return self._a + self._b + self._c

a, b, c = 3, 4, 5
if Perimeter.is_valid(a, b, c):
    demo = Perimeter(a, b, c)
    print(demo.value())
else:
    print('无法构成三角形')

类方法

类方法使用@classmethod修饰符对方法进行修饰

类方法的第一个参数为cls,表示当前类对象(有的地方也称之为类的元数据对象),通过该参数可以获取类的相关信息并且可以创建出类的对象

@classmethod修饰符的作用是将cls参数和当前类进行关联,不使用该修饰符则在创建对象时需要手动传入类对象

class Man:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    @classmethod
    def new(cls):
        return cls("三千",33)

demo = Man.new()
print(demo.name)


网址导航