Python 学习日记day30

内容:面向对象编程

面向对象的三大特征:
    封装
隐藏对象的细节,只对外提供必要的方法。相当于吧细节封锁起来,只对外暴露相关调用方法。
    继承
继承可以让子类有父类的特征,提高代码的重要性。
    多态
多态指的是同一个方法用于不同对象产生不同的行为


继承
继承时面向对象的程序的重要特征,也是实现‘代码复用’的重要手段。
如果一个新继承自一个设计好的类,就直接具备了已有类的特征,就大大降低了工作难度。
语法格式:
    Python支持多重继承,一个子类可以继承多个父类,继承的语法格式如下:
        class 子类类名(父类1[,父类2,父类3...])
            类体
如果在类定义中没有指定父类,则默认父类是object类,也就是说,object是所有类的父类,里面定义了一些所有类共有的默认实现,比如:__new__()。

定义子类是,必须在其构造函数中调用父类的构造函数。调用格式如下:
父类名.__init__(self,参数列表)

# 测试继承的基本使用
class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def say_age(self):
            print('姓名:{0}\t年龄:{1}'.format(self.name, self.__age))


class Student(Person):
    def __init__(self, name, age, score):
        self.__score = score
        Person.__init__(self, name, age)
a= Student('ww',18,90)
a.say_age()
print(a.name)
print(dir(a))
print(a._Person__age)
###结果:
姓名:ww	年龄:18
ww
['_Person__age', '_Student__score', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_age']
18

当父类中含有私有属性时,如果想调用私有属性,则格式如下:a._Person__age

类成员的继承和重写:
1.成员继承:子类继承父类除构造方法外的所有成员。
2.方法重写:子类可以重新定义父类中的方法,父类继承的方法将会被覆盖。

查看类的继承层次结构
通过类的方法mro()或者类的属性__mro__可以输出这个类的继承层次结构。
 

class A:
    pass
class B(A):
    pass
class C(B):
    pass
print(C.mro())
###结果:
[<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

object根类:
object类是所有类的父类,因此所有类都具有object类的属性和方法。

dir()察看对象属性:
 

class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def say_age(self):
            print('姓名:{0}\t年龄:{1}'.format(self.name, self.__age))

obj=object()
s=Person('ww',19)
print(dir(obj))
print(dir(s))
###结果:
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
['_Person__age', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_age']

object有一个__str__()方法,用于返回一个对于‘对象的描述’,对应于内置函数str()经常用于print()方法,帮助查看对象的信息。__str__()可以重写。

多重继承:
Python支持多继承,一个子类可以有多个直接父类。尽量避免使用!!!


mor(Meethod Resolution Order):方法解析顺序。我们可以通过mro()方法获得‘类的层次结构’,方法解析顺序也是按照这个‘类的层次结构’寻找的。
 

class A:
    def aa(self):
        print('aa')
    def cc(self):
        print('aaaa')
class B:
    def bb(self):
        print('bb')
    def cc(self):
        print('bbbb')
class C(B,A):
    def ccc(self):
        print('cc')

c=C()
c.cc()
c.ccc()
##结果:
bbbb
cc

super()获取父类的定义
在子类中,如果想获得父类的方法时,可以用super()
super()代表父类的定义,不是父类对象
 

#测试super()
class A:
    def say(self):
        print('A:',self)

class B(A):
    def say(self):
        super().say()
        print('B:',self)

B().say()
#结果:
A: <__main__.B object at 0x0000021C18902830>
B: <__main__.B object at 0x0000021C18902830>


多态:
多态是指同一个方法调用由于对象不同可能会产生不同的行为:

class Person:
    def celebrate(self):
        print('节日快乐')
class Chinese(Person):
    def celebrate(self):
        print('小日子过的不错的日本回归祖国的怀抱')
class American(Person):
    def celebrate(self):
        print('川建国同志下台')
def Celebrate(m):
    if isinstance(m,Person):
        m.celebrate()
    else:
        print('全世界庆祝新冠疫情结束')
Celebrate(Chinese())
Celebrate(American())
class Japanese:
    pass
Celebrate(Japanese())
#结果:
小日子过的不错的日本回归祖国的怀抱
川建国同志下台
全世界庆祝新冠疫情结束

 总结:

有一说一一开始没想到我居然能打卡30天的,毕竟咱什么德行自己知道,然后就是这三十天学的东西真的就很基础,很明显感觉到了遇到了很大的瓶颈--确定了一个项目,明明很明确的目标,实现的功能也很明确,但就是很容易想混了或者说想的太简单了,不全面那种,我也尝试用脑图,流程图来写项目的流程什么的,可是根本get不到一个项目的重点,或者实现那个功能中间的一些必要步骤。暂时的话后面更新的应该多半是一些学着别人写的项目,主要目的就是想学会这个思考的思维吧,我觉得我的python基础是有了的,即使悟性再差也可以算是入门了。未来可期!!!问题不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值