对象模拟真实事件,把数据和代码都封装在一起。
一般可以通过动态特征(能够做什么)和静态特征(长什么样)来描述事件,前者叫方法(函数),后者叫属性(变量)。
类名约定以大写字母开头。
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的私有机制是伪私有。