Python ~~~ 面向对象的利器
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 ~~~ 面向对象的利器的更多相关文章
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- 5.15 python 面向对象的软件开发&领域模型
1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- hdu 3853LOOPS (概率DP)
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
- poj----1330Nearest Common Ancestors(简单LCA)
题目连接 http://poj.org/problem?id=1330 就是构建一棵树,然后问你两个节点之间最近的公共父节点是谁? 代码: /*Source Code Problem: 1330 U ...
- Combination Sum II [LeetCode]
Problem description: http://oj.leetcode.com/problems/combination-sum-ii/ Basic idea: use recursive a ...
- 关于call和apply的那点事儿
在JavaScript中改变闭包中的this关键字中经常用到的就是call和apply了 首先:call和apply的作用的区别是什么? 答:call和apply 的作用是相同的.都是用来改变函数th ...
- UVa 11021 - Tribles
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- ASP.NET MVC学习之路由篇(3)
根据路由输出链接 既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径. 首先我们的路由注册部分如下所示: 1 ...
- ASP.NET MVC学习之路由篇(1)
1.基本路由 RouteConfig.cs: 1 public class RouteConfig 2 { 3 public static void RegisterRoutes(RouteColle ...
- windows-docker开发我常用命令 docker-machine ssh default
docker-machine ssh default docker logs test sudo systemctl start docker docker tag IMAGEID ne ...
- 【STL】-Map/Multimap的用法
初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...
- java使用JDBC连接数据库
1.下载connectors/j: 地址:http://www.mysql.com/downloads/connector/j/ 选择 到此页面点击“No,thanks……" 若使用Java ...