这里不详细介绍类,只总结一些小萌新在学习python 类时会有的一些疑点。

  • 类的私有性

    1. 在python中,属性和方法的访问权限只有两种,公开的,和私有的。在给属性命名时用两个“__”下划线作为开头,就设置其为私有的了。
    2. class Test:
      
          def __init__(self, foo):
      self.__foo = foo def __bar(self):
      print(self.__foo)
      print('__bar') def main():
      test = Test('hello')
      # AttributeError: 'Test' object has no attribute '__bar'
      test.__bar()
      # AttributeError: 'Test' object has no attribute '__foo'
      print(test.__foo) if __name__ == "__main__":
      main()

      可以看到,以上调用方法都会因为没有权限给返回错误

          # AttributeError: 'Test' object has no attribute '__bar'

      如果想要调用私有的属性,使用如下方式:

      def main():
      test = Test('hello')
      test._Test__bar()
      print(test._Test__foo)
    3. 在实际开发中,不建议设置私有属性,会导致子类无法访问,python这一点与java和C#不同,他们类中的属性(数据抽象)通常都是私有的,目的是保护数据;而其类中的方法(行为抽象)都是公开的。而python不从语法层面保护私有成员的私密性。其实这个设定是无意义的,因为只要知道调用私有属性的方法,仍然可以进行调用。
    4. python 里有一句这样的话,We are all consenting adults here.我们都是成年人。这种设定只是给使用者一个暗示,这是一个不应该直接访问的属性和方法。
    5. __bar 是私有的,__bar__不是私有的。
    6. 参考链接:https://blog.csdn.net/jackfrued/article/details/79521404
  • self是个什么东西嗯?

    1. 首先,python 要求在类方法中,至少要包含一个参数,但没有规定此参数名,故此将类方法的第一个参数名为self,这是一个约定俗成的习惯。
    2. self 参数可以理解为C++ 语言中的this指针。详细举例:我们可以针对一个类,创建多个对象,每个对象都有多个方法。当某一对象调用类方法时,该对象会把自己的引用(self 指针)作为第一个参数传给被调用方法,这样,就让python 解释器明白,这个时候操作的方法是哪个对象的。
    3. 执行以下这段代码
      class Dog:
      def __init__(self):
      print(self,"在调用构造方法")
      # 定义一个jump()方法
      def jump(self):
      print(self,"正在执行jump方法")
      # 定义一个run()方法,run()方法需要借助jump()方法
      def run(self):
      print(self,"正在执行run方法")
      # 使用self参数引用调用run()方法的对象
      self.jump()
      dog1 = Dog()
      dog1.run()
      dog2 = Dog()
      dog2.run()
    4. 查看self指针状态,可以看到两个对象的指针入口是不一样的。
    5. 将self作为返回值有什么效果?将self参数作为返回值,可以多次连续调用同一个方法,使代码更简洁。这里有一个理解例子
      class ReturnSelf :
      def grow(self):
      if hasattr(self, 'age'):
      print(hasattr(self,'age'))
      self.age +=
      else:
      self.age =
      # return self返回调用该方法的对象
      print(self.age)
      return self
      rs = ReturnSelf()
      # 可以连续调用同一个方法
      rs.grow().grow().grow()
      print("rs的age属性值是:", rs.age)

        返回值为

        参考链接:http://c.biancheng.net/view/2266.html

  • def __init__():方法的含义

  1. __init__(),是一个特殊的类实例方法,也被称为构造方法,构造函数。
  2. 它在创建对象时,每次都会被python解释器自动调用。在python中,这种以  '__xx__'表示的方法,都具有特殊的意义。

Python 类学习的一些Tips的更多相关文章

  1. python类学习以及mro--多继承属性查找机制

    版权声明:本文为博主原创文章,未经博主允许不得转载. 还记得什么是新式类和旧式类吗? Python中,一个class继承于object,或其bases class里面任意一个继承于object,这个c ...

  2. python类学习

    创建关于汽车的类 class Cars(): def __init__(self, brand, country): self.brand = brand self.country = country ...

  3. python类,魔术方法等学习&&部分ssti常见操作知识点复习加深

    python类学习&&部分ssti常见操作知识点复习加深 在做ssti的模块注入的时候经常觉得自己python基础的薄弱,来学习一下,其实还是要多练习多背. 在python中所有类默认 ...

  4. python入门学习:8.类

    python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类   面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写 ...

  5. Python学习笔记之面向对象编程(三)Python类的魔术方法

    python类中有一些方法前后都有两个下划线,这类函数统称为魔术方法.这些方法有特殊的用途,有的不需要我们自己定义,有的则通过一些简单的定义可以实现比较神奇的功能 我主要把它们分为三个部分,下文也是分 ...

  6. 学习python类

    类:Python 类提供了面向对象编程的所有基本特征: 允许多继承的类继承机制, 派生类可以重写它父类的任何方法, 一个方法可以调用父类中重名的方法. 对象可以包含任意数量和类型的数据成员. 作为模块 ...

  7. 杨韬的Python/Jupyter学习笔记

    Python语法学习 https://zhuanlan.zhihu.com/p/24162430 Python 安装库 安装Jupyter Notebook 先安装Python cmd 进入K:\Ju ...

  8. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  9. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

随机推荐

  1. Building Applications with Force.com and VisualForce (DEV401) (四):Building Your user Interface

    Dev 401-004:Application essential:Building Your user Interface: Module Agenda1.Custom Applications2. ...

  2. 【Pytest01】全网最全最新的Pytest框架快速入门

    一.Pytest简介pytest是一个非常成熟的全功能的Python测试框架,主要有一下几个特点:1.简单灵活,容易上手,支持参数化2.能够支持简单的单元测试和复杂的功能测试,还可以用来做seleni ...

  3. swagger2 接口文档

    1,maven: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  4. Python第十一章-常用的核心模块03-json模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  5. Prism 源码解读5-数据绑定和命令

    介绍 WPF本身就支持通知.绑定和命令,实现ViewModel和VIew之间的通讯,但相对来说功能比较少,Prism扩充了这些功能并提供更加强有力,简洁的数据绑定和命令. 0 绑定通知 WPF的绑定通 ...

  6. 【webpack 系列】进阶篇

    本文将继续引入更多的 webpack 配置,建议先阅读[webpack 系列]基础篇的内容.如果发现文中有任何错误,请在评论区指正.本文所有代码都可在 github 找到. 打包多页应用 之前我们配置 ...

  7. JVM基础结构与字节码执行引擎

    JVM基础结构 JVM内部结构如下:栈.堆. 栈 JVM中的栈主要是指线程里面的栈,里面有方法栈.native方法栈.PC寄存器等等:每个方法栈是由栈帧组成的:每个栈帧是由局部变量表.操作数栈等组成. ...

  8. Vue引用阿里图标库

    首先进入官网http://www.iconfont.cn/ 转载:https://blog.csdn.net/qq_34802010/article/details/81451278 选择图标库 在里 ...

  9. 1057 Stack (30分)(树状数组+二分)

    Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...

  10. Html 慕课园编程练习9-22

    题目要求: 制作一个表格,显示班级的学生信息. 要求: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff 2. 点击添加按钮,能动态在最后添加一行 3. ...