原文:Python面向对象编程OOP 及 classmethod / staticmethod区别_晓康的博客-CSDN博客](https://xiaokang.blog.csdn.net/article/details/97277128)
1.什么是面向对象编程?
Object Oriented Programming(OOP)
把对象作为基本单元,把对象抽象成类(Class),包含成员(属性)和方法(用来操作成员)。
面向对象基本特征:抽象、封装(数据和实现操作的代码)、继承、多态(重写父类方法)
Python 中使用类来实现。过程式编程(函数),OOP(类)
class Person(object): # py2需要显示继承object,py3 直接可以 class Person
def init(self, name, age): # 构造方法用来初始化成员
self.name = name
self.age = age
def print_name(self): # 操作成员的类的方法
print('my name is {}'.format(self.name))
变量名前加单下划线表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,如:self._sex = 0 。
变量名前加双下划线表示的是 私有类型(private)的变量, 只能是允许这个类本身进行访问了。如:self.__foo = 0。
Python在名称前后加双下划线表示的是特殊方法(魔术方法),一般是系统定义名字,如:def __len__(self): .....。
2.classmethod / staticmethod区别
classmethod vs staticmethod (它们两个经常被用作类方法的装饰器)
都可以通过 Class.method() 的方式使用
classmethod 第一个参数是 cls,可以引用类变量
staticmethod 使用起来和普通函数一样,只不过放在类里去组织
class Persion:
Country = 'china' # class var
def __init__(self, name):
self.name = name
@classmethod
def print_country(cls):
print(cls.Country)
@staticmethod
def join_name(first_name, last_name):
return last_name + first_name # last_name 姓
classmethod是为了使用类变量
staticmethod是代码组织的需要,完全可以放到类之外
staticmethod 并没有引用当前类的任何东西,可以把staticmethod理解为本来该放到外面的函数只是给塞到类里。其实跟类并没有什么关系,相当于给了它一个作用范围,让它可以在类里面去使用
网友评论