1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python实例方法 静态方法 类方法

Python实例方法 静态方法 类方法

时间:2019-04-06 08:35:26

相关推荐

Python实例方法 静态方法 类方法

Python实例方法、类方法、静态方法区别

1. 实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。

实例方法,第一个参数必须要默认传实例对象,一般习惯用self。静态方法,参数没有要求。类方法,第一个参数必须要默认传类,一般习惯用cls。

class Foo(object):"""类三种方法语法形式"""def instance_method(self):print("是类{}的实例方法,只能被实例对象调用".format(Foo))@staticmethoddef static_method():print("是静态方法")@classmethoddef class_method(cls):print("是类方法")foo = Foo()foo.instance_method()foo.static_method()foo.class_method()print('----------------')Foo.static_method()Foo.class_method()# output是类<class '__main__.Foo'>的实例方法,只能被实例对象调用是静态方法是类方法----------------是静态方法是类方法

2. 类中静态方法方法调用静态方法的情况

下面的代码,静态方法调用另一个静态方法,如果改用类方法调用静态方法,可以让cls代替类,

让代码看起来精简一些。也防止类名修改了,不用在类定义中修改原来的类名。

# coding:utf-8class Foo(object):X = 1Y = 2@staticmethoddef averag(*mixes):return sum(mixes) / len(mixes)@staticmethoddef static_method():return Foo.averag(Foo.X, Foo.Y)@classmethoddef class_method(cls):return cls.averag(cls.X, cls.Y)foo = Foo()print(foo.static_method())print(foo.class_method())# output:pythonpython and django

3. 继承类中的区别 从下面代码可以看出,如果子类继承父类的方法,子类覆盖了父类的静态方法

子类的实例继承了父类的static_method静态方法,调用该方法,还是调用的父类的方法和类属性。子类的实例继承了父类的class_method类方法,调用该方法,调用的是子类的方法和子类的类属性。

class Father(object):X = 1Y = 2@staticmethoddef average(*mixes):return sum(mixes) / len(mixes)@staticmethoddef static_method():return Father.average(Father.X, Father.Y)@classmethoddef class_method(cls):return cls.average(cls.X, cls.Y)class Son(Father):X = 3Y = 5@staticmethoddef average(*mixes):return sum(mixes) / 3s = Son()# 子类的实例继承了父类的static_method静态方法,调用该方法,还是调用的父类的方法和类属性。print(s.static_method()) # (1+2)/2=1.5# 子类的实例继承了父类的class_method类方法,调用该方法,调用的是子类的方法和子类的类属性。print(s.class_method()) # (3+5)/3=2.66666# 1.5# 2.6666666666666665

参考:/p/21101992

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。