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

[经验分享] python入门(七)类与对象和类与方法

[复制链接]

尚未签到

发表于 2017-5-6 12:08:04 | 显示全部楼层 |阅读模式
python入门(七)类与对象和类与方法

参考书籍 python_note_pdq.pdf
11.1 用户定义数据类型
class Point:
    pass
a = Point()
print(a,type(a))
控制台打印:
<__main__.Point object at 0x00B9F1D0> <class '__main__.Point'>

定义了一个自定义的类Point,pass表示暂时没有内容,下面的a就在使用这个类型了。

11.2 属性
class Point:
    pass
a = Point()
a.x = 3.0
a.y = 4.0
print(a.x,a.y)
控制台打印信息:
3.0 4.0

11.3 同一性
class Point:
    pass
a = Point()
a.x = 3.0
a.y = 4.0
b = Point()
b.x = 3.0
b.y = 4.0
print(a==b,id(a),id(b))
c = a
print(a==c,id(a),id(c))
控制打印输出:
False 12186064 12539312
True 12186064 12186064

虽然坐标相同,表示同一个点,但是==并不相同。这里有模糊性。

11.4 长方形类
class Rectangle:
    pass
class Point:
    pass
#查找右上角的点的位置
def findUpperRight(rectangle):
p = Point()
p.x = rectangle.width + rectangle.corner.x
p.y = rectangle.height + rectangle.corner.y
return p
r1 = Rectangle()
r1.width = 10
r1.height = 2
r1.corner = Point()
r1.corner.x = 1
r1.corner.y = 1
up_corner = findUpperRight(r1)
print("(",str(up_corner.x),",",str(up_corner.y),")")
控制台输出:
( 11 , 3 )

11.5 对象拷贝
比如Point没有包含任何嵌入的对象,copy方法已经足够了。这种复制叫做浅拷贝。
import copy
class Point():
    pass
p1 = Point()
p1.x = 2.0
p1.y = 4.0
p2 = p1
print(p1,p2,id(p1),id(p2))
p2 = copy.copy(p1)
print(p1,p2,id(p1),id(p2))
控制台打印信息:
<__main__.Point object at 0x00C0ECF0> <__main__.Point object at 0x00C0ECF0> 12643568 12643568
<__main__.Point object at 0x00C0ECF0> <__main__.Point object at 0x00C451D0> 12643568 12866000

比如Recrangle对象包含了嵌入对象,copy模块包含了一个名为deepcopy 的方法,它可以拷贝任何嵌入的对象。这种拷贝我们称之为深拷贝。
import copy
class Rectangle():
    pass
class Point():
    pass
r = Rectangle()
r.width=20
r.height=10
r.corner = Point()
r.corner.x = 2.0
r.corner.y = 4.0
p = copy.copy(r)
print(p.corner,r.corner,id(p.corner),id(r.corner))
p = copy.deepcopy(r)
print(p.corner,r.corner,id(p.corner),id(r.corner))
控制台打印信息:
<__main__.Point object at 0x00BF55B0> <__main__.Point object at 0x00BF55B0> 12539312 12539312
<__main__.Point object at 0x00C45150> <__main__.Point object at 0x00BF55B0> 12865872 12539312

12.1 面向对象技术
import copy
#自定义类
class Time:
    pass
    #类方法,其中参数 self,打印自己
    def printTime(self):
        print("%2d" % self.hours, ":", \
              "%2d" % self.minutes, ":", \
              "%2d" % self.seconds)
    #类方法,增加多少秒的时间
    def increment(self, seconds):
        self.seconds = seconds + self.seconds
        while self.seconds >= 60:
            self.seconds = self.seconds - 60
            self.minutes = self.minutes + 1
            while self.minutes >= 60:
                self.minutes = self.minutes - 60
                self.hours = self.hours + 1
    #类方法,判断时间先后
    def after(self,time):
        if self.hours > time.hours:
            return 1
        if self.hours < time.hours:
            return 0
        else:
            if self.minute > time.minute:
                return 1
            if self.minute < time.minute:
                return 0
            else:
                if self.second > time.second:
                    return 1
                else:
                    return 0
now = Time()
now.hours = 10
now.minutes = 30
now.seconds = 10
now.printTime()
after = copy.copy(now)
after.increment(60*30)
after.printTime()
print(now.after(after),after.after(now))

控制台打印信息:
10 : 30 : 10
11 :  0 : 10
0 1

12.2 可选择的参数
#求和函数
def total(head,tail,step = 1):
    temp = 0
    while head <= tail:
        temp = temp + head
        head = head + step
    return temp
print(total(1,20),total(1,20,2))
控制台打印信息:
210 100

缺省参数的定义要符合以下规则:缺省参数全部位于参数表的后部,而且缺省参数之间不能在有非缺省参数。下面定义是不合法的:
total(head=1, tail, step) #错误的定义
total(head=1, tail, step=1) #错误的定义
total(head, tail=100, step) #错误的定义

12.3 构造函数
#__init__前后两个_的构造函数
class Time:
    def __init__(self,hours=0,minutes=0,seconds=0):
        self.hours = hours
        self.minutes = minutes
        self.seconds = seconds
    def printTime(self):
        print("%2d" % self.hours, ":", \
              "%2d" % self.minutes, ":", \
              "%2d" % self.seconds)
#缺省构造函数
now = Time()
#按照顺序,传递参数
t1 = Time(12,23,22)
#传递子集,可以不按照顺序了
t2 = Time(seconds=12,hours=11)
now.printTime()
t1.printTime()
t2.printTime()
控制台输出:
0 :  0 :  0
12 : 23 : 22
11 :  0 : 12

运维网声明 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-373792-1-1.html 上篇帖子: python模块之poplib: 用pop3收取邮件 下篇帖子: 【转】Python 分布式文件系统 Mongodb GridFS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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