Python 类学习的一些Tips

这里不详细介绍类,只总结一些小萌新在学习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 += 1
              else:
                  self.age = 1
              # 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__‘表示的方法,都具有特殊的意义。

原文地址:https://www.cnblogs.com/foe0/p/11506466.html

时间: 09-11

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

【Python&数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的

Python网络学习资源汇总

Python学习视频 ● Python正则表达式 ● Django架构和使用 ● Django快速Web应用开发入门视频教程 ● Python类Nagios监控软件开发实战 ● Python项目实训视频教程:网络爬虫 ● 苏勇老师Python 语言基础视频教程-Web开发 ● Python自动化运维入门篇 ● Python开发者的必备工具 ● 利用Python SOCKET多线程开发FTP软件 ● Python高级运维编程实战精品入门进阶 ● Python零基础入门学习视频教程 ● 如何用PYT

Python Click 学习笔记(转)

原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发的一个小工具需要在命令行环境下操作,就写个学习笔记. 国际惯例,先来一段 "Hello World" 程序(假定已经安装了 Click 包). # hello.py import click @click.command() @click.option('--count', default

Python Tutorial 学习(六)--Modules

6. Modules 当你退出Python的shell模式然后又重新进入的时候,之前定义的变量,函数等都会没有了. 因此, 推荐的做法是将这些东西写入文件,并在适当的时候调用获取他们. 这就是为人所知的脚本文件. 随着编程的深入,代码的增多,你可能又会将代码存到不同的文件中方便管理. 你会想到去使用之前的编程中已经写好了的一个函数的定义. Python有自己的方式去实现这些.它会将这些保存了定义的函数,类等的文件(文件夹)称作module; 一个module中的定义的函数 类等可以被导入到另一个

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

Python 类特殊方法__getitem__如何使用?

本文和大家分享的主要是python类的特殊方法__getitem__相关内容,一起来看看吧,希望对大家学习python有所帮助. 凡是在类中定义了这个__getitem__ 方法,那么它的实例对象(假定为p),可以像这样 p[key] 取值,当实例对象做p[key] 运算时,会调用类中的方法__getitem__. 先用一个夸张一点的例子来说明这个问题. 当实例对象通过[] 运算符取值时,会调用它的方法__getitem__,从上面代码中输出二个笑脸可以看出来. 一般这样用 ''' 黄哥Pyth

60分钟Python快速学习(转)

60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 04.在Python中书写自己的类 60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空格缩进表示等. 今天自己用了60分钟快速学习了下Python的语

Python基础学习(九)

Python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 线程在执行过程中与进程还是有区别的.每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

[简明python教程]学习笔记2014-05-05

今天学习了python的输入输出.异常处理和python标准库 1.文件 通过创建一个file类的对象去处理文件,方法有read.readline.write.close等 [[email protected] 0505]# cat using_file.py #!/usr/bin/python #filename:using_file.py poem='''Programing is fun when the work is done use Python! ''' f=file('poem.