美文网首页
Python中面向对象编程的一些高级方法拾遗

Python中面向对象编程的一些高级方法拾遗

作者: 超级超级小天才 | 来源:发表于2020-12-05 04:35 被阅读0次

其他关于Python的总结文章请访问:https://www.jianshu.com/nb/47435944

Python中面向对象编程的一些高级方法拾遗

声明类中的私有变量

定义类中的私有变量,只要将变量名前加双下划线即可__,如果一个变量名以__开头,它就是一个私有变量(private),只能在类内部访问,不能外部访问(比如__name)。

但是开头结尾都有双下划线__的变量是特殊变量,特殊变量是可以直接访问的,不是private变量,所以不要定义这种变量(比如__name__

但但是,其实双下划线的变量是可以访问的,需要使用 单下划线+类名+双下划线的变量名 访问(比如Student类中的__name变量,可以使用 instance._Student__name 来访问的),但是既然设置成了私有变量,那就是不想让访问,一定要这么做是没有什么特别的好处的

实例属性与类属性

定义在类中的 __init__ 函数中的变量(比如self.name)是属于实例的,即每一个实例都有自己的 self.name。而定义在类中,__init__ 函数外部(前)的变量则是属于类自己的变量,比如这样定义的变量:

class Student(object):
    name = 'Student'

属于类的属性是不会因实例而异的,所有实例都拥有同样的类属性。

限制给实例添加的属性

动态语言中,可以给对象(object)动态添加属性,比如一个student实例,可以临时添加 student.name 的属性,或者给Student类动态添加属性 Student.name,使用 __slots__ 可以限制给一个类的实力添加的属性:

class Student():
    __slots__ = ('name', 'age')

这样一来Student的实例就只能动态添加nameage两个属性,添加其他的会报错:

student = Student()

student.name = "Hello"
student.age = 12

student.score = 100  # Raise AttributeError: 'Student' object has no attribute 'score'

使用@property将方法“变为”属性

类中,通常为了不暴露一些变量,或者对一些变量的做限制,会猜用定义一个私有变量(比如score),然后使用两个方法:一个get方法来获取变量值(比如get_score)和一个set方法来修改变量的值(比如set_score)来完成。使用时需要调用两个方法。

使用装饰器 @property 可以更简单的做到这一点,它可以将一个方法“变成”属性:

  • 只使用 @property 定义只读属性:
class Student():
    @property
    def name(self):
        return "Lily"


student = Student()
print(student.name)
  • 使用 @property 和配套产生的 @NAME.setter 来定义可读属性:
class Student():

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name


student = Student()
student.name = "Lily"

print(student.name)

多重继承

Python支持多重继承,即一个子类可以继承自多个父类,只要在子类的括号中传入多个要继承的父类即可:

class Student():
    pass

class Teacher():
    pass

class Someone(Student,Teacher):
    pass

相关文章

  • 动手理解Python的引用、赋值、拷贝

    Python是一门面向对象的高级编程语言,相较于其他面向对象的编程语言,Python在面向对象的路上走得更远,即,...

  • Python面向对象编程(二)

    本文我们继续介绍一些Python面向对象编程中的高级用法,依然参考廖雪峰老师的Python教程。 教程地址:htt...

  • Python中面向对象编程的一些高级方法拾遗

    其他关于Python的总结文章请访问:https://www.jianshu.com/nb/47435944[ht...

  • Python从入门到精通

    Python语法的三个阶段 Python基础语法函数是编程 Python进阶语法面向对象编程 Python高级语法...

  • Python中的继承

    Python编程语言很容易学习,可以使用过程性编程方法和面向对象编程方法。继承是面向对象编程中的一个这样的概念。代...

  • 序章

    目标:系统全面学习python高级知识和并发编程方法:功能-> 原理 -> 应用案例技术:面向对象、魔法方法、元类...

  • 2019-10-23

    python面向对象编程总结 python中的对象:在其...

  • Python学习笔记之类和对象

    面向对象编程,是当前比较主流的编程方式。Python同样支持面向对象编程,在面向对象编程中,可以编写表示现实世界中...

  • 廖雪峰python3 教程

    观其大纲 1 python基础 2 函数 3 高级特性 4 函数式编程 5 模块 6 面向对象编程 7 面向对象高...

  • Python全栈之路系列之面向对象基础

    面向对象基本介绍 Python编程方式: 面向过程编程 面向函数编程 面向对象编程 名称定义: 如果函数没有在类中...

网友评论

      本文标题:Python中面向对象编程的一些高级方法拾遗

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