Python面向对象
提到面向对象,我们就不得不提到另外一个相近的概念-面向过程。那么什么是面向过程?什么又是面向对象?
面向过程——步骤化
面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可
面向对象——行为化(概念相对抽象,可结合下面的例子理解)
面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化后才是对象),创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为
注意:面向对象只是一种思想,并不是一门编程语言。
Python从设计之初就已经是一门具有面向对象思想的语言,正因为如此,在Python中创建一个类和对象是很容易的。而类和对象是面向对象的核心。下面我们就开始了解面向对象,首先看两个概念:类和对象
类:多个具有特殊功能的个体的集合
对象:在一个类中,一个具有特殊功能的个体,能够帮忙解决某件特定的事情,也被称为实例
两者关系:类是具有共同特征的对象的集合,而对象是类的具体的存在【包含关系】
在程序中使用的时候,一般是先定义类,然后创建对象
类 对象
人类 张三、李四、王五、…
动物 鸡、鸭、猪、狗 …
… …
类其实也是一种数据类型,只不过一般情况下是自定义的,所以可以将类认为是自定义的数据类型,用法和整型,string,list等基本是相同的
下面我们看下如果创建一个类:
语法:
class 类名():
类体
说明:
1、Python中使用class关键字定义类
2、类名只要是一个合法的标识符即可,要求遵循大驼峰命名法
3、通过缩进区分类体
4、类体一般包含两部分内容:对类的特征的描述、对类的行为的描述
案例:
class Person():
name = "zhangjianbo" #类变量,类属性
age = 18
sex = '男'
#类方法,普通方法,实例方法
def eat(self, food):
print("eating:", food)
def run(self):
print("runing")
print("self的地址",id(self))
另外写一个文件,内容如下,注意上个文件的命名要是Person ,from 后面的 要和实际导入的文件名一致
from Person import Person
#创建一个对象
p1 = Person() # 构建一个对象 p1
print(p1.name,p1.sex) # 对象.属性名 可获取到对象的属性值
p1.name = "小姐姐" # 可使用 对象.属性 = 值 对 属性进行赋值
p1.sex = "女"
print(p1.name,p1.sex)
p1.eat('汉堡') # 语法:对象.函数名(参数列表) 注意:self不需要被传参,传参的时候注意区分参数的类型【默认参数,不定长参数,关键字参数】
p1.run()
执行结果如下:
> python MyPython-32-2.py
zhangjianbo 男
小姐姐 女
eating: 汉堡
runing
self的地址 1744873460960
构造函数
init:构造函数
作用:创建对象,给对象的实例变量赋初始值语法:
def init(self,args1,args2…)
函数体
说明:
a、之前的写法中并没有显式的定义__init__函数,说明系统默认提供了一个无参的构造函数
b、args1,args2…一般设置的形参列表和成员变量有关
注意:
1、当创建对象的时候,默认调用了系统提供的无参的构造函数。
2、手动添加了有参的构造函数之后,系统将不再提供无参的构造函数。
上面的案例中,我们没有写构造函数,当我们 使用 p1 = Person() #构建一个对象 时 ,调用了默认提供的无惨构造函数。
下面我们写一个有参的构造函数。
class Person():
name = "zhangjianbo" #类变量,类属性
age = 18
def __init__(self, sex):
self.sex = sex #实例变量, 实例属性
#类方法,普通方法,实例方法
def eat(self, food):
print("eating:", food)
def run(self):
print("runing")
print("self的地址",id(self))
这时我们再使用 p1 = Person() 构造对象时,程序会报错 :
Traceback (most recent call last):
File "MyPython-32-4.py", line 2, in
p1 = Person()
TypeError: __init__() missing 1 required positional argument: 'sex'
正确使用如下:
from Person1 import Person
p1 = Person('男')
print(p1.name,p1.sex,p1.age)
执行结果如下:
> python MyPython-32-4.py
zhangjianbo 男 18
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)