设为首页 收藏本站
查看: 782|回复: 0

[新闻资讯] 小猿圈Python开发之类与实例基本用法与注意事项详解

[复制链接]
累计签到:3 天
连续签到:3 天
发表于 2019-6-21 17:08:50 | 显示全部楼层 |阅读模式
Python开发是在学习的人多不胜数,而且遇到的问题也越来越多,为了大家更好的学习Python开发,现在小猿圈Python讲师为你分享类与实例基本用法与注意事项详解,希望对你有所帮助。



首先和其他编程语言相比,Python用非常少的新语法和语义将类加入到语言中。Python的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法。对象可以包含任意数量和类型的数据。和模块一样,类也拥有Python天然的动态特性:它们在运行时创建,可以在创建后修改。
Python的类
Python类实例时,先调用__new__方法,返回该类的实例对象,这个实例对象就是__init__方法的第一个参数self,即self是__new__的返回值
(1)类的访问控制:
①默认:Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量。
②私有:在python中定义私有变量只需要在变量名或函数名前加上”__“两个下划线,那么这个函数或变量就是私有的了
原理:在内部,python使用一种namemangling技术,将__membername替换成_classname__membername,也就是说,类的内部定义中,所有以双下划线开始的名字都被"翻译"成前面加上单下划线和类名的形式。
例如:为了保证不能在class之外访问私有变量,Python会在类的内部自动的把我们定义的__spam私有变量的名字替换成为_classname__spam(注意,classname前面是一个下划线,spam前是两个下划线),因此,用户在外部访问__spam的时候就会提示找不到相应的变量。
注:python中的私有变量和私有方法仍然是可以访问的;访问方法如下:
私有变量:实例._类名__变量名
私有方法:实例._类名__方法名()
(2)Python类和类成员的私有化支持:
其实,Python并没有真正的私有化支持,但可用下划线得到伪私有。所以一般需要统一规范:
①_xxx:"单下划线"开始的成员变量叫做保护变量(protected),意思是只有类实例和子类实例能访问到这些变量,
需通过类提供的接口进行访问;不能用'from<module>import*'导入;
②__xxx:类中的私有变量/方法名(Python的函数也是对象,所以成员方法称为成员变量也行得通),
"双下划线"开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据;
③__xxx__系统定义名字,前后均有一个“双下划线”代表python里特殊方法专用的标识,如__init__()代表类的构造函数;
注:python派生类可以与父类同名,因此这种情况可以使用私有变量:
class A():
  def __init__(self):
    self.__name='python' #翻译成self._A__name='python'
class B(A):
  def func(self):
    print self.__name #翻译成print self._B__name
instance=B()
#instance.func()#报错:AttributeError: B instance has no attribute '_B__name'
print instance.__dict__
print instance._A__name
输出结果:
{'_A__name': 'python'}
python
注:当B类取名A时,则instance.func()可以直接调用
(3)Python类的继承:
python类和其他OOP语言一样,都可以使用继承功能,也同样不允许多继承,但可以通过多级继承来实现。
(1)继承方法:派生类的类名的()里面写入父类的类名;
(2)构造函数:子类中构造函数加上super(子类,self).__init__(参数1,参数2,….);
(3)实例化顺序:实例化对象c---->c调用子类__init__()---->子类__init__()继承父类__init__()----->调用父类__init__();
(4)判断继承的函数:isinstance()及issubclass(),其中isinstance()用于检查实例类型;issubclass()用于检查类继承;
(5)方法重写:子类中定义与父类同名的方法,子类实例调用时就会使用重写的方法;
(6)子类重写构造函数:子类构造函数中不使用super调用父类即可;
(7)多态:当子类和父类都存在相同名字的方法时,子类的方法覆盖了父类的方法,在代码运行时,会调用子类的方法;
注:多态实现了开发-封闭原则:
①对扩展开放(Openforextension):允许子类重写方法函数;
②对修改封闭(Closedformodification):不重写,直接继承父类方法函数;
Python类的其他知识
(1)python中self和cls的区别:
①self表示一个具体的实例本身,相当于php的this。如果用了staticmethod,那么就可以无视这个self,将这个方法当成一个普通的函数使用;
②cls表示这个类本身;
@staticmethod:只能用类名去调用的方法;
@classmethod:既能用实例去调用,也能用类名去调用的方法;
(2)多重继承的方法搜索顺序:
对于多数应用来说,在最简单的情况下,你可以认为搜索从父类所继承属性的操作是深度优先、从左至右的,当层次结构中存在重叠时不会在同一个类中搜索两次。因此,如果某一属性在DerivedClassName中未找到,则会到Base1中搜索它,然后(递归地)到Base1的基类中搜索,如果在那里未找到,再到Base2中搜索,依此类推。
真实情况比这个更复杂一些;方法解析顺序会动态改变以支持对super()的协同调用。这种方式在某些其他多重继承型语言中被称为后续方法调用,它比单继承型语言中的super调用更强大。
动态改变顺序是有必要的,因为所有多重继承的情况都会显示出一个或更多的菱形关联(即至少有一个父类可通过多条路径被最底层类所访问)。例如,所有类都是继承自object,因此任何多重继承的情况都提供了一条以上的路径可以通向object。为了确保基类不会被访问一次以上,动态算法会用一种特殊方式将搜索顺序线性化,保留每个类所指定的从左至右的顺序,只调用每个父类一次,并且保持单调(即一个类可以被子类化而不影响其父类的优先顺序)。
以上是小猿圈Python老师介绍的类与实例基本用法与注意事项详解,相信很多同学对于Python有了一定的了解,不过大家不要忘记点赞、收藏、转发呦Python交流群:242719133,让更多和你一样有同样问题的同学得到帮助,小猿圈为大家提供一个良好的学习平台。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-911803-1-1.html 上篇帖子: 小猿圈Java学习之深入了解java序列化 下篇帖子: 小猿圈简述Linux下使用shell脚本输出带颜色字体
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表