zoukankan      html  css  js  c++  java
  • 【Python学习日记】B站小甲鱼:类和对象

    对象模拟真实事件,把数据和代码都封装在一起。

    一般可以通过动态特征(能够做什么)和静态特征(长什么样)来描述事件,前者叫方法(函数),后者叫属性(变量)。

    类名约定以大写字母开头。

    class 类名:

      #属性

      #方法

    然后定义比如 bb.类名(),就可以生成bb对象啦。

    Python是一门面向对象编程的语言

    特征

       封装(变量和方法),还可以隐蔽信息。Python的列表其实就是一个对象,我们利用sort(),append()这些方法的时候,不需要知道它是怎么执行的,这就是封装。

    继承

       子类自动共享父类之间数据和方法的机制。代码展示继承如下:

    class Mylist(list):
        pass
    
    list1 = Mylist()
    list1.append(1)
    list1.append(5)
    list1.append(2)
    print(list1)
    list1.sort()
    print(list1)

        我定义了list1这样一个对象,它继承了list的属性和方法,因此正常使用了append()和sort()这两种方法。

    多态

       不同对象对同一方法响应不同。a和b都是调用fun()这个方法,但是结果输出是不一样的。

    class A:
        def fun(self):
            print("我是闯")
    
    class B:
        def fun(self):
            print("我是bb")
    
    a = A()
    b = B()
    a.fun()
    b.fun()

    面向对象编程:

    1.self是什么东西

      python的self相当于c++的指针

    class Ball:
        def setName(self,name):
            self.name = name
        def kick(self):
            print("我是%s,我被踢了" %self.name)
    a = Ball()
    b = Ball()
    c = Ball()
    a.setName("土豆")
    b.setName("番茄")
    c.setName("香蕉")
    a.kick()
    b.kick()

    输出为:

    我是土豆,我被踢了
    我是番茄,我被踢了

      在调用kick方法的时候,self会get到对象名,从而找到对应的self.name

    2.Python的魔法方法

      _init_(self),init方法是构造方法,实例一个对象的时候方法就会在对象被创建的时候自动调用。类似C++的构造函数。

    class Ball:
        def __init__(self,name):
            self.name = name
        def kick(self):
            print("我是%s,我被踢了" %self.name)
    
    a = Ball('土豆')
    
    a.kick()

    3.公有和私有

    在python中不适用public和private关键字,定义私有函数或变量只需要在函数名前加__就可以了。name magling

    在下面这个程序中,因为name是私有变量,因此无法被外界访问。

    class Person():
        __name='bb'
    p = Person()
    print(p.__name)

    如果想要访问私有变量,需要通过内部进行访问。

    class Person():
        __name='bb'
        def getName(self):
            return self.__name
    p = Person()
    print(p.getName())

    事实上也可以通过_类名__变量名来访问隐藏的变量

    class Person():
        __name='bb'
        def getName(self):
            return self.__name
    p = Person()
    print(p._Person__name)

    因此Python的私有机制是伪私有。

  • 相关阅读:
    Collection<E>接口
    Iterable<T>接口
    Iterator<E>接口
    js图片压缩
    js计算最大公约数和最小公倍数
    canvas原生js写的贪吃蛇
    左右两栏div布局,高度自适应
    vue的图片路径,和背景图片路径打包后错误解决
    职责链模式
    js多个异步请求,按顺序执行next
  • 原文地址:https://www.cnblogs.com/JodyJoy1201/p/13653682.html
Copyright © 2011-2022 走看看