面向对象

类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例)
对象:一个具体的事物(事物即数据和动作的结合体)
类和对象的关系:对象是由类产生的,类相当于模板(实际上实例就是调用了类中__init__方法产生的,只有数据属性)
实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫一个实例(实例 = 对象)

面向对象设计:将一类具体事物的数据和动作整合在一起,即面向对象设计
面向对象编程:用定义类+实例/对象的方式去实现面向对象的设计

注意:用面向对象语言写程序,和一个程序的设计是面向对象的,两者是不同的。面向过程语言 用 函数 也可以实现面向对象。

特殊的类属性
class Student(object):
	‘好好学习,天天向上’
	name = 'aaa'
	def study(self):
		pass
	
print(dir(Student))      	#返回列表,查看类所有  **属性名**(包括内建属性名)
print(Student.__dict__)    #返回字典,查看类的  **属性字典**

Student.study()   #本质是查属性字典  Student.__dict__['study']

print(Student.__name__)		#类的名字(字符串)
print(Student.__doc__)			#类的文档字符串(好好学习,天天向上)
print(Student.__base__)			#类的第一个父类
print(Student.__bases__)		#类的所有父类构成的元组
print(Student.__dict__)			#类的属性字典
print(Student.__module__)		#类定义所在的模块
print(Student.__class__)			#实例所对应的类

对象调用属性时先查看对象属性字典(只包括__init__中的数据属性),之后查看类属性字典,都找不到就会报错
为什么对象可以调用类中函数属性? 实例的作用域是类中的 __init__函数,在该函数中找不到就到上一层(类)中去找。(无函数作用域概念,自己懂就好,切勿面试)

类的增删改查
#增加
Student.country = 'China'          #增加数据属性
def test(self):
	print('这是类生成的函数属性')
Student.test = test         #增加函数属性

#修改
Student.study = test        #修改函数属性
Student.country = 'haha'       #修改数据属性

#删除
del Student.country

实例增删改查差不多,不过实例一般不进行函数属性的增加(保证实例只有数据属性,函数引用类中的即可),增加之后不符合类的结构,系统不会自动调用self

count = 'bbb'
class Student(object):
    # '好好学习,天天向上'
    count = 'aaa'
    def __init__(self,name):
        self.name = name
        print('---->',count)
    def study(self):
        print('%s 爱学习'%self.name)

print(Student.count)
s1 = Student('alex')
print(s1.count)
s1.study()     # 不用传第一个参数,python会自动将 s1传过去相当于--->s1.study(s1)

#结果
aaa
----> bbb
aaa

注意:只有通过点 . 调用实例属性或者类属性时才会找类中的属性;没有点 . 就不会在类中查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值