概述
python入门(八)操作符重定义和继承
参考书籍 python_note_pdq.pdf
13.1 加减法重定义
Python的基本数据类型如整数、浮点数,能够进行数学运算。类可以吗?为了使类的实例也可以进行数学操作,我们需要在类的内部重新定义数学操作符,使之支持用户定义的数据类型。
class RMB:
def __init__(self,sum=0.0):
self.sum = sum
#呵呵,类似于toString()?
def __str__(self):
return str(self.sum)
#重定义加法操作
def __add__(self,other):
return RMB(self.sum + other.sum)
#重定义减法操作
def __sub__(self,other):
return RMB(self.sum - other.sum)
a = RMB(2.1)
b = RMB(1.0)
print(a,b,a+b,a-b,a.__add__(b),a.__sub__(b))
控制台输出如下:
2.1 1.0 3.1 1.1 3.1 1.1
13.2 乘法重定义
如果乘法操作符“*”的左右操作数都是用户定义的数据类型,那么调用mul 。若左边的操作数是原始数据类型,而右边是用户定义数据类型,则调用rmul 。
class Rect:
def __init__(self, width = 0.0, length = 0.0):
self.width = width
self.length = length
def __str__(self):
return '(' + str(self.length) + ',' + str(self.width) + ')'
def area(self):
return self.width * self.length
class Line:
def __init__(self,length = 0.0):
self.length=length
def __str__(self):
return str(self.length)
def __mul__(self,other):
return Rect(self.length,other.length)
def __rmul__(self,other):
return Line(self.length * other)
aline = Line(5.87)
bline = 2.9 * Line(8.34) #r表示右边是我们的对象,左边是基本类型
print("aline=",aline," bline=",bline)
rect = aline * bline
print(rect,type(rect))
控制台打印信息:
aline= 5.87 bline= 24.186
(24.186,5.87) <class '__main__.Rect'>
14.1 继承
面向对象程序语言的一个重要特点是继承。继承的子类拥有被继承的父类的所有方法,在此基础上,子类还可以添加自己的专有方法。
14.2 继承的定义
class BaseClass:
def print(self):
print("hello world")
class DerivedClass(BaseClass):
def print(self):
BaseClass.print(self) #调用父类的方法
a = DerivedClass()
a.print()
控制台打印信息如下:
hello world
14.3 定义一个父类
14.3 继承自以上父类的子类
class Person:
def __init__(self, name = None, age = 1,sex = "men"):
self.name = name
self.age = age
self.sex = sex
def displayInfo(self):
print("name : %-20s" % self.name,"age : %-20d" % self.age,"sex : %-20s" % self.sex)
class Student(Person):
def __init__(self,name = None,age = 1,sex = "men",grade = 0):
Person.__init__(self, name, age, sex) #调用父类的构造方法
self.grade = grade
def displayInfo(self):
Person.displayInfo(self) #调用父类的displayInfo方法
print("grade : %-20d" % self.grade)
a = Person("sillycat",27,"men")
b = Student("kiko",24,"women",1)
a.displayInfo()
b.displayInfo()
控制台打印信息如下:
name : sillycat age : 27 sex : men
name : kiko age : 24 sex : women
grade : 1
14.5 私有方法
在Python 中,类的私有方法和私有属性,不能够从类的外面调用。类的方法和属性是公有,还是私有,可以从它的名字判断。如果名字是以两个下划线开始,但并不是以两个下划线结束,则是私有的。其余的都是公有的。
import math
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def __str__(self):
return '(' + str(self.x) + ',' + str(self.y) + ')'
class Line:
def __init__(self, p1 = Point(), p2 = Point()):
self.__p1 = p1 #私有属性
self.__p2 = p2
def __str__(self):
return str(self.__p1) + str(self.__p2)
def __distance(self): #私有方法
tx = math.pow(self.__p1.x, 2) + math.pow(self.__p2.x, 2)
ty = math.pow(self.__p1.y, 2) + math.pow(self.__p2.y, 2)
return math.sqrt(tx + ty)
def length(self):
print(self.__distance())
a = Point(1,2)
b = Point(3,4)
c = Line(a,b)
print(c)
print(c.length())
print(c.__distance())
控制台返回信息:
(1,2)(3,4)
5.47722557505
None
Traceback (most recent call last):
File "D:workeasypythonsrccomsillycateasypythonTestMain.py", line 25, in <module>
print(c.__distance())
AttributeError: 'Line' object has no attribute '__distance'
最后
以上就是粗犷紫菜为你收集整理的python入门(八)操作符重定义和继承的全部内容,希望文章能够帮你解决python入门(八)操作符重定义和继承所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复