欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python面向对象

程序员文章站 2022-07-10 08:30:06
...

python面向对象

	从面向对象开始,我们就已经进入了编程语言的高级部分,但我们一定以之前学习的内容为基础,来构建
自己的编程金字塔。

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。

如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。

接下来我们先来简单的了解下面向对象的一些基本特征。

面向对象技术简介

这个部分介绍的不仅仅是独指python,他是所有具有面向对象语言应该有的并且能实现的概念,务必牢记每一条。

专业名词 定义
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
方法重写 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写
实例化 创建一个类的实例,类的具体对象

其实还有一些,只是写到这儿我觉得稍显枯燥,所以把神秘的面纱交给各位coder自己去查阅了

创建类

简单的类编写:

class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)    
print("MyClass 类的方法 f 输出为:", x.f())

# 输出结果为:
# MyClass 类的属性 i 为: 12345
# MyClass 类的方法 f 输出为: hello world

构造器

构造器再使用的时候,即使类本身没有这个属性,也可以调用,即用即取

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart     
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5

self

self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

class Test:     
    def prt(self):
        print(self)
        print(self.__class__)
t = Test()
t.prt()

继承

Python 同样支持类的继承,如果一种语言不支持继承,类就没有什么意义。

class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()

更厉害的是,python支持多继承哟~ 格式和单继承并没有多大的区别

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    ...
    <statement-N>

私有化

私有化的表示就很简单了,在属性和方法的前面加上两个下划线就表示私有了 “__”。
这个私有就是真的私有了,实例都不能访问它。