春节假期python

参考廖雪峰的python教程
廖雪峰的python教程

继承和多态

python也是一门面向对象的语言,自然也会有class,值得惊喜的是,和java,javascript中的类较为相似,学起来轻车熟路。

多态的好处就是,当我们需要传入Dog、Cat、Tortoise……时,我们只需要接收Animal类型就可以了,因为Dog、Cat、Tortoise……都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态的意思:

对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则

对扩展开放:允许新增Animal子类;

对修改封闭:不需要修改依赖Animal类型的run_twice()等函数。

对于开闭原则的解释,是一种设计模式:

开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。

1.开闭原则中“开”,是指对于组件功能的扩展是开放的,是允许对其进行功能扩展的;
2.开闭原则中“闭”,是指对于原有代码的修改是封闭的,即不应该修改原有的代码。

实例属性和类属性

1.实例属性

class Student(object):
    def __init__(self, name):
        self.name = name

s = Student('Bob')
s.score = 90

像这种都是绑定的实例属性,类比js里的构造函数constructor()里的 都是给实例绑定属性

2.当我们定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到。

 class Student(object):
    name = 'Student'
实例属性的get和set方法

python getattr__和__setattr

我的理解是类的私有方法,在调用getter或者setter设置实例属性时会自动调用,比如b.d=这就是调用了set

下面这段代码就是实现了dict

class Dict(dict):

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

    def __setattr__(self, key, value):
        self[key] = value

d = Dict(a=1, b=2)
print (d['a'])
print (d.a) #调用类中原本没有定义的属性时候,调用__getattr__
d.a = 100 #对实例的属性进行赋值的时候调用__setattr__
print (d['a'])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值