Python的类与对象

很多人都知道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 = "Li li an"  #公开的成员
    __age = 20       #私有的成员

p = person()
print(p.name)
print(p.__age)   #访问age会报错

我们可以看到age的前面加了两个下划线,这就成了私有变量,如果我们在类的外部读取它会报错

但是Python的私有不是真私有,相当于一种障眼法,可以理解成Python自动给它改了名,如果真的想访问:

class person():
    name = "Li li an"  #公开的成员
    __age = 20       #私有的成员

p = person()
print(p.name)
print(p._person__age)   #访问私有变量

在类的前面加一个下划线,再访问变量,如果想修改这个私有变量那怎么办呢?难道还修改不了了?其实Python是有方法的

class person():
    name = "Li li an"  #公开的成员
    __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 Li li an")

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("Li li an")   #实例化时传入参数
p.fun()

猜你喜欢

转载自blog.csdn.net/May_Xu_/article/details/81458504