面向对象编程
一、介绍
面向对象:
现实——>具体的事物
程序——>对象
面向对象涉及的:
类
对象
属性
方法
对象:
例如:小明的手机
小红的手机
小绿的手机
。。。
以上是对象的集合,某某某的手机就是具体的事物,在程序中就是对象。
从对象中提取共同的特征或者特点,作为一个类别属性。
类别:手机类。
电脑类
学生类
等等
共同的特征:品牌、颜色、价格。。。。
共同的动作:打电话、发短信、玩游戏。。。
特征就是属性;
动作就是方法;
将属性和方法封装为某个类。
多个对象——>提取共同的特征和动作——>封装到一个类中;这就是面向对象编程。
二、例子
#所有的类名要求首字母大写,多个单词采用驼峰式命名
#python3中所有的类默认继承object
'''
class 类名(父类):
属性:特征
方法:动作
'''
class Phone():
pass
#属性
#方法
#使用类创建对象
phone1 = Phone()
print(phone1)
<__main__.Phone object at 0x000001AF514E2988>
Process finished with exit code 0
可以看到phone1为一个Phone的对象。
类就好比一个模具,利用模具创建一个个实物,就是使用类创建对象。
添加类属性:
添加类属性,修改属性;
class Phone():
brand = 'huawei'
#属性
#方法
#使用类创建对象
phone1 = Phone()
print(phone1)
print(phone1.brand)
phone2 = Phone()
print(phone2)
print(phone2.brand)
phone2.brand = 'iphone'
print(phone2.brand)
<__main__.Phone object at 0x000001F446B63048>
huawei
<__main__.Phone object at 0x000001F446B63108>
huawei
iphone
Process finished with exit code 0
可以看到phone1的属性品牌为huawei,phone2的属性由huawei改为iphone。
#定义类和属性
class Student():
# 类属性
name = 'xiaoming'
age = 2
#使用类创建对象
xiaoming = Student()
print(xiaoming.age)
xiaoming.age = 18 #赋值操作,动态创建对象属性
print(xiaoming.age)
#程序底层操作顺序,现在对象内存中查找属性,然后在类内存中查找属性
#若对象内存中由某个属性,则不会再去类内存中查找。
2
18
#修改类属性,用类名操作
Student.name = 'xiaolv'
print(xiaoming.name)
xiaolv
3.类中的方法
#类中的方法:动作
#种类:普通方法、类方法、静态方法、魔术方法
'''
普通方法格式:
def 方法名(函数名)(self,[选填参数]):
pass
'''
class Phone():
brand = 'huawei'
price = 4999
type = 'honor 30'
# Phone类里面的方法:call
def call(self):
print('正在打电话。。。')
print('留言',self.note)
phone1 = Phone() #类创建对象
phone1.note = '我是phone1的note' #添加对象的属性
print('====phone1======',phone1) #
phone1.call() #调用对象的方法
phone2 = Phone()
phone2.note = '我是phnoe2的note'
print('====phone2====',phone2)
phone2.call()
self是自身的意思,call的参数为self,phone1.call()=call(phone1);那么call方法中的self.note=phone1.note。
所以两个输出为各自的note。
#类中的方法:动作
#种类:普通方法、类方法、静态方法、魔术方法
'''
普通方法格式:
def 方法名(函数名)(self,[选填参数]):
pass
'''
class Phone():
brand = 'huawei'
price = 4999
type = 'honor 30'
# Phone类里面的方法:call
def call(self):
print("正在访问通讯录。。。")
for person in self.address_book:
print(person.items())
print('正在打电话。。。')
print('留言',self.note)
phone1 = Phone()
phone1.note = '我是phone1的note'
phone1.address_book = [{"1561231234":"xiaoming","1561231235":"xiaolv"}]
print('====phone1======',phone1)
phone1.call()
phone2 = Phone()
phone2.note = '我是phnoe2的note'
print('====phone2====',phone2)
phone2.call()
====phone1====== <__main__.Phone object at 0x0000022817A46C48>
正在访问通讯录。。。
dict_items([('1561231234', 'xiaoming'), ('1561231235', 'xiaolv')])
正在打电话。。。
留言 我是phone1的note
====phone2==== <__main__.Phone object at 0x0000022817A46B48>
正在访问通讯录。。。
Process finished with exit code 1
如果只有单个对象具有某个属性,程序会出错,因为对象2没有对应的属性。如上结果,phone2并没有对应的通讯录,程序无法向下执行。