栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python--面向对象程序设计部分

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python--面向对象程序设计部分

1.self

self在init()构造函数中是必须存在的, 有点像C++中的this,是一个默认的对象(和类的实例是一个意思),但Python中必须写出,C++中一般不写出

2.内置函数

①__init__()函数:可以当做C++ 中的构造函数来理解,只是多了self,在初始化对象的时候,会自动调用init()函数。

②__str__()函数:str是被print函数调用的,就是我们实例化对象a后,用print(a),就会输出a对应类内__str()__函数return的字符串。

③自定义对象的比较

__eq__重定义等于,__lt__重定义小于,__gt__大于,__le__小于等于,__ge__大于等于

def __eq__(self,other):
    return self.x==other.x and self.y==other.y

④重载运算

__add__(self,other) #可以实现类的相加
__sub__(self,other) #减法
__mul__(self,other) #乘法
__mod__(self,other) #除法

#加法的示例
class A:
	def __add__(self,other):  #other表示其他的类
		c = self.a+other.a
        return c

⑤__call__:

call()方法是Python中一个很特殊的方法。凡是可调用对象,都可以通过调用__call__()方法来调用该对象。如果类中定义了__call__()方法,那么该类的实例对象也将成为可调用对象。该对象被调用时,将执行__call__()方法中的代码。 

call方法可以通过实例化对象来直接调用,调用方法就是实例化对象名字后加一个括号()

3.继承和派生

class 类名(基类名1,基类名2,...):

        ...

#继承方法1:类名.__init__(self,待传参数)
class Teacher(People):
    def __init__(self, name, sex, age, title):
        People.__init__(self, name, age, sex)
        self.title = title
    def teach(self):
        print('%s is teaching' %self.name)

#继承方法2:super().__init__(self,待传参数)
class Teacher(People):
    def __init__(self, name, sex, age, title):
        super().__init__(name, age, sex) #调用的是绑定方法,自动传入self
        self.title = title
    def teach(self):
        print('%s is teaching' %self.name)
#注意:在python2中super 的使用需要完整地写成super(自己的类名,self),而在python3中可以简写为super()。

1.super().__init__相对于类名.__init__,在单继承上用法基本无差
2.但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,具体看前面的输出结果
3.多继承时,使用super方法,对父类的传参数,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错
4.单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错
5.多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号