美文网首页
Python面向对象编程OOP 及 classmethod /

Python面向对象编程OOP 及 classmethod /

作者: 祁小彬 | 来源:发表于2022-01-14 07:39 被阅读0次

原文: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理解为本来该放到外面的函数只是给塞到类里。其实跟类并没有什么关系,相当于给了它一个作用范围,让它可以在类里面去使用

相关文章

网友评论

      本文标题:Python面向对象编程OOP 及 classmethod /

      本文链接:https://www.haomeiwen.com/subject/hmfkcrtx.html