【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的私有机制是伪私有。

原文地址:https://www.cnblogs.com/JodyJoy1201/p/13653682.html