class Rectangle(): # 有没有括号都行 .
def __init__(self,x,y):
self.x=x
self.y=y def getPeri(self):
return (self.x+self.y)* def getArea(self):
return self.x*self.y rect=Rectangle(,) print('这个长方形的周长是'+str(rect.getPeri())) print('这个长方形的面积是'+str(rect.getArea())) class A:
def __init__(self):
return 'A of A-Cup' a=A() # __init__ should return NONE not 'str'
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
这个长方形的周长是14
这个长方形的面积是12
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/new.py", line , in <module>
a=A()
TypeError: __init__() should return None, not 'str'
>>>

尴尬的是  就看不懂下面的啥东西 ....(更加尴尬的是 , 看了看又会了 .)

 class CapStr(str):
def __new__(cls,string): # 在 一个对象实例化的时候 第一个被调用的方法 .
string=string.upper() # 她的第一个参数就是 , cls 也就是这个类.# new 需要返回一个实例对象
return str.__new__(cls,string)
#return super().__new__(cls,string) # 在将 传入的string 变为大写之后 让 str开始处理 . 并返回 这是一个很聪明的处理方法. a=CapStr('I Love FishC.Com')
print(a)
# 将 new重写 , 将string 处理完毕之后 再调用原来的str的new
# 在子类中重写某一方法的时候 希望父类的该方法不消失 , 那么就要使用 第四行或者第五行的方法了.

.

 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
I LOVE FISHC.COM!
>>>

补充 .

 str1='jack'
print(id(str1))
str1='JACK'
print(id(str1))
print('------------不是一个地址的-----很明显不是同一个变量.---------')
num=
print(id(num))
num+=
print(id(num))
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============

 ------------不是一个地址的-----很明显不是同一个变量.---------

 >>> 

析构函数 .

 >>> class C:
def __init__(self):
print('我是__init__方法,我被调用了 ...')
def __del__(self):
print('我是__del__方法 ,我被调用了 ...') >>> a=
SyntaxError: invalid syntax
>>>
>>>
>>> a=C()
我是__init__方法,我被调用了 ...
>>> b=a
>>> def a
SyntaxError: invalid syntax
>>> del a
>>> del b
我是__del__方法 ,我被调用了 ...

----------------------------------------------------------------------------------------------------------------------------------

class New_int(int):   # 定义一个新的类  继承 int 类
def __add__(self,other): # 重写 + 运算符 # __add__ 就是 int 中 + 的行为
return int.__sub__(self,other) # 重写的 加法运算符 调用 int类 里面的 减法运算运算符 def __sub__(self,other):
return int.__add__(self,other) # 上面的是一个小小的恶作剧 . 把加法和减法的名称进行了互换.
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
>>> 5+6
11
>>> a=5
>>> b=6
>>> a+b
11
>>> c=New_int(7)
>>> d=New_int(10)
>>> c+d
-3
>>> a=New_int(a)
>>> b=New_int(b)
>>> a+b
-1
>>> # 由于没有初始化 int 类型的 等于运算符 所以只好 用 a=New_int()了 .

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 #   下面这个程序 是用来 看看思维如何的 . 看你能不能找出问题 .

 class Try_int(int):
def __add__(self,other):
return self+other def __sub__(self,other):
return self+other # 这里重载了 int类 的加法和减法 . 但是重载的时候 出了问题 . 没有给加法赋予正确的意义 .
# 在这里只是说 +法 到时候调用加法 . 这样就形成了无穷的递归/
 =============== RESTART: C:/Users/Administrator/Desktop/new.py ===============
>>> a=5
>>> b=6
>>> a+b
11
>>> 5+6
11
>>> a=Try_int(5)
>>> b=Try_int(6)
>>> a+b
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a+b
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other .
.
.
.
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
File "C:/Users/Administrator/Desktop/new.py", line 16, in __add__
return self+other
RecursionError: maximum recursion depth exceeded
>>>

至于上述 为什么 必须先将 一个变量用 自己定义个类先声明(a=New_int(5).....)一下呢?

这是因为在这里 + 有不同的意思 有的是int类的+,有的是你自己定义的类的 + . 当开始相加的时候 系统会根据变量的数据类型去掉用相应的加法 ,

这就是为什么要 这样做了(a=New_int(5).....)

Python ~~~ 面向对象的利器的更多相关文章

  1. python 面向对象终极进阶之开发流程

    好了,你现在会了面向对象的各种语法了,  但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...

  2. 5.15 python 面向对象的软件开发&领域模型

    1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...

  3. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  4. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  5. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  7. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  8. Python面向对象详解

    Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是

  9. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

随机推荐

  1. Spring Boot 环境变量读取 和 属性对象的绑定

    网上看到的一些方法,结合我看到的 和我们现在使用的.整理成此文: 第一种方法 参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创) 第二种方法 class不用 ...

  2. Javascript的"预编译"思考

    今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的 <script> var x = 1, y = z = 0; function add(n) { n = n+1;  } y = ...

  3. thinkphp @代表什么

    import('@.ORG.Util.RBAC'); @表示在同一目录下.看一下Lib目录下除了Action外,还有ORG目录.如果使用@.ORG.Util.RBAC,则表示RBAC是放在Lib/OR ...

  4. android:configChanges属性

    对android:configChanges属性,一般认为有以下几点: 1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏 ...

  5. c#和数据库技术基础之程序设计集散地-数据库

    数据库,不明觉厉,今天我们就来数据库的神秘面纱 1.使用数据库的必要性 随着互联网技术的高速发展,截止到2013年我国网民的数量已接近6亿,网民数量的增长同事带动网上购物,微博,网络视频等新产业的发展 ...

  6. 用HTML5实现的各种排序算法的动画比较 及算法小结

    用HTML5实现的各种排序算法的动画比较 http://www.webhek.com/misc/comparison-sort/ 几种排序算法效率的比较 来源:http://blog.chinauni ...

  7. 在express3.0上使用模板

    express3.0取消了layout设置,为了能使用模版,经过百度后发现有个express-partials模块可以使用 1:安装 npm install express-partials 模块安装 ...

  8. 小心buffer的拼接问题 --转

    最近遇见一个从前没有遇见的陷阱,就是data里的chunk拼接. 由于本人身为前端工程师,对buffer的概念实在是认识不足.这次的场景是我要通过http.get去抓取远端的网页文件,很不小心的是对方 ...

  9. if条件语句练习题

    习题一: 做一个算缘分的小游戏:输入男方姓名,女方姓名,输出缘分指数,给出建议. static void Main(string[] args) { //做一个算缘分的小游戏: //输入男方姓名,女方 ...

  10. Remote Debugging Chrome 结合Genymotion模拟器的移动端web真机调试(转)

    尝试了好多方法,刚开始想用bluestacks调试手机页面,不过在打开chrome的时候,会黑屏,什么也看不了.最后又是更新android系统,又是卸掉bluestacks重新安装,怎么都不行.最后没 ...