Python面向对象编程

1.面向对象编程概述

面向对象编程(OOP)
面向对象编程,是一种编程方式,需要使用“对象”来实现

对象的特征:

1.世间万物皆对象
2.每个对象都是唯一的
3.对象具有属性和行为(对象的行为包括具有的功能及具体的实现)
4.对象具有状态
5.对象分为类对象和实例对象两大类(类对象是具有相同属性和行为的实例对象的抽象;类对象就是实例对象的模板,实例对象是由类对象创建出来的)

面向对象编程的大体步骤

1.抽象出类对象
2.抽象出类对象的属性
3.抽象出类对象的行为(方法)
4.根据类对象创建实例对象
5.通过实例对象访问属性和方法

定义类对象的语法格式

#class 类名(object):
      #属性和方法
#类名由一个或多个单词组成,每个单词的首字母大写且其余字母全部小写,如:SomeClass
#(object)表示
class SomeClass(object):
    pass

初识类的方法:

#行为(方法)是类中特殊的函数
class Neko(object):
    def __init__(self,breed,name,age,health): #实例化后的对象,构造函数第一个必取self
        self.breed = breed        #品种
        self.name = name          #昵称
        self.age =  age           #年龄
        self.health = health      #健康状况
    #跑
    def run(self):
        print("Cat is running")
    #喵
    def miao(self):
        print("Cat is miaoing")
    #吃
    def eat(self):
        print("Cat is eatting")
        
#根据类对象创建实例对象
neko = Neko("波斯猫","喵喵",1,"很好")
print(neko.breed)
print(neko.name)
print(neko.health)

类的方法与函数的区别:

方法就是定义在类对象中的函数。方法与函数的区别在于:

1.定义方法时,方法的第一个形参表示调用该方法的实例对象,第一个形参的名称通常是self,也可以是其他名称
2.调用方法时,系统自动将调用该方法的实例对象作为实参传递给第一个形参。第一个实参会传递给第二个形参,第二个实参会传递给第三个形参,依次类推。

根据类对象创建实例对象的语法格式为:

类名([实参])

neko = Neko("波斯猫","喵喵",1,"很好")
print(neko.breed)
print(neko.name)
print(neko.health)

neko.run()
neko.miao()
neko.eat()

实例对象属性

实例属性

实例属性指的是实例对象所绑定的属性。
绑定实例属性(给实例对象绑定属性)的方式有两种:
1.在类对象的内部(方法中)
语法格式:self.属性名 = 属性值
推荐在特殊方法__init__中进行绑定,这样,在创建实例对象后就会自动调用特殊方法__init__对实例对象进行初始化,从而绑定实例属性。如果在其他方法中进行绑定,可能需要手动调用方法后才会绑定。
2.在类对象的外部
Python是动态语言,所以,在实例对象创建之后,可以对其动态的绑定属性。
语法格式:实例对象.属性名 = 属性值
如果指定名称的实例属性已存在,则是对实例属性进行修改。

访问实例属性的方式

1.在类对象的内部(方法中)
语法格式:self.属性名
2.在类对象的外部
实例对象.属性名
添加前缀“self”或“实例对象”,是为了表明实例属性被哪个实例对象所绑定。

class MyClass(object):
	def __init__(self):
		#在类对象的内部(方法中)绑定实例属性
		self.ial = 18
		
	def do_sth1(self):
		#在类对象的内部(方法中)访问实例属性
		print(self.ia1)

	def do_sth2(self):
		print(self.ia2)

	def do_another(self):
		#在类对象的内部(方法中)绑定实例属性
		self.ia2 = 56
	def do_sth3(self):
		print(self.ia3)
mc = MyClass()
mc.do_sth1()
--18
mc.do_another()
mc.do_sth2()
--56

print(mc.ia2)
--56
#在类对象的外部绑定实例属性
mc.ia3 = 66
print(mc.ia3)
--66

mc.do_sth3()
--66

同一个类对象的不同实例对象所绑定的实例属性是相互独立的。也就是说,给一个实例对象所绑定的实例属性,对于另外一个实例对象是不起作用的。

实例对象.__ dict__

可获得该实例对象所绑定的所有属性及其值的字典

>>>mc.__dict__    #dir(mc)
{'ia1': 18,'ia2': 56,'ia3': 88}
>>>mc2.__dict__    #dir(mc2)
{'ia1': 18}

类对象属性

类属性

类属性指的是类对象所绑定的属性
绑定类属性(给类对象绑定属性)的方式有两种:
1.在类对象的内部(方法中)
语法格式:属性名 = 属性值
2.在类对象的外部
Python是动态语言,所以,在实例对象创建之后,可以对其动态的绑定属性。
语法格式:类对象.属性名 = 属性值
如果指定名称的类属性已存在,则是对类属性进行修改。

类属性的访问

1.在类对象的内部(方法中)
语法格式:类对象.属性名
2.在类对象的外部
类对象.属性名 或 实例对象.属性名
添加前缀“类对象”,是为了表明类属性被哪个实例对象所绑定。

class MyClass(object):
	#在类对象内部(方法外)绑定类属性
	cal = 66
	def do_sth(self):
		#在类对象内部(方法外)访问类属性
		print(MyClass.ca1)
>>>MyClass.ca1
66
>>>mc = MyClass()
>>>mc.ca1
66
>>>mc.do_sth()
66
>>>MyClass.ca2 = 88   #在类对象的外部绑定类属性
>>>print(MyClass.ca2)
88
>>>print(mc.ca2)
88
>>>MyClass.ca2 = 99   #在类对象的外部修改类属性
>>>print(MyClass.ca2)
99
>>>print(mc.ca2)
99
class MyClass(object):
	#在类对象内部(方法外)绑定类属性
	cal = 66
	
	def do_sth(self):
		#在类对象内部(方法外)访问类属性
		print(MyClass.ca2)
		
	def do_another(self):
		#在类对象内部(方法外)访问类属性
		print(MyClass.ca2)
>>>mc = MyClass()
99
>>>mc.do_another()   #在类对象外部调用类方法,使得在类对象内部(方法中)访问类属性
99

访问实例属性和类属性都可以通过“实例对象.属性名”的方式。
当通过“实例对象.属性名”的方式访问属性时,会先查找指定的实例对象中有没有指定名称的实例属性,如果没有,再查找对应的类对象中有没有指定名称的类属性。所以,当通过“实例对象.属性名”的方式访问属性时,如果实例属性和类属性同名,实例属性会屏蔽掉类属性。
当通过“实例对象.属性名 = 属性值”的方式绑定属性时,这里的属性只表示实例属性(因为类属性没有这样的绑定方式),所以。只会查找指定的实例对象有没有绑定指定名称的实例属性,如果没有则进行绑定,如果已经绑定,则对属性值进行修改。

class Person(object):
    age = 18
    
p = Person()
#在实例对象p中没有找到名为age的实例属性,然后在类对象Person中找到了名为age的属性
print(p.age)
--18
#打印名为age的类属性
print(Person.age)
--18
p.age = 19
print(p.age)
--19

print(Person.age)
--18
#删除实例对象p绑定的实例属性
del p.age
print(p.age)
--18
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值