很多人都知道Python是一门面向对象的编程语言,那么到底是如何面向对象呢,其实对于Python来说,万物皆对象,但是还有很重要的一点,得有类:
对象 = 属性 + 方法
类的语法:class()
class fun():
def Name(self,name):
self.name = name
def prints(self):
print("My name is {0}".format(self.name))
req = fun() #实例化对象
req.Name("Bob")
req.prints()
可以看到我们定义了一个类fun(),然后里边有两个函数,有self,其实这个self相当于C++的this指针,self就是指类本身,self.name就是fun类的属性变量,而name是外部传来的函数,不是fun自带的,所以self.name = name
的意思就是把外部传来的参数name
的值赋值给fun类自己的属性变量self.name
。和普通函数不同,在类中创建的函数,第一参数永远是self。创建完后,就要实例化对象,不然无法调用里面的函数。
类成员的封装:对对象的成员进行访问限制
三个级别:1,公开(public) 2,受保护的(protected) 3,私有的(private)
私有成员是最高级别的封装,只能在当前类或对象中访问
class person():
name = "MeiMei" #公开的成员
__age = 20 #私有的成员
p = person()
print(p.name)
print(p.__age) #访问age会报错
我们可以看到age的前面加了两个下划线,这就成了私有变量,如果我们在类的外部读取它会报错
但是Python的私有不是真私有,相当于一种障眼法,可以理解成Python自动给它改了名,如果真的想访问:
class person():
name = "MeiMei" #公开的成员
__age = 20 #私有的成员
p = person()
print(p.name)
print(p._person__age) #访问私有变量
在类的前面加一个下划线,再访问变量,如果想修改这个私有变量那怎么办呢?难道还修改不了了?其实Python是有方法的
class person():
name = "MeiMei" #公开的成员
__age = 20 #私有的成员
p = person()
print(p.name)
print(p._person__age) #访问私有变量
p._person__age = 19 #修改私有变量的值
print(p._person__age) #访问修改后的私有变量
是不是很简单,友情提示:以后做项目的时候别人如果有私有变量,那就还是不要访问了,人家既然设置了私有,那就肯定是不希望你改动的。
受保护的:在类中或者子类中可以访问,在外部不可以访问。
封装方法:在前面添加一个下划线即可。
再来介绍下Python的一个魔法方法:__init__,相当于一个构造函数
class person():
def __init__(self):
print("I am very fond of MeiMei")
p = person() #实例化之后立马访问构造函数
__init__()方法体现在只要实例化一个对象,这个方法就会在对象被创建时自动调用。
其实实例化对象时是可以传入参数的,这些参数会自动传入__init__()方法中
可以通过重写这个方法来自定义对象的初始化操作。
class person():
def __init__(self,name):
self.name = name
def fun(self):
print("I am very fond of {0}".format(self.name))
p = person("MeiMei") #实例化时传入参数
p.fun()