类: 把一类事物的相同特和动作整合到一起就是类,类是一个抽象概论(比如人的特征:升高 年龄; 动作:吃饭睡觉等)
对象: 就是基于上面所说的类创建的一个具体事物(也就是具体存在的,比如一个人)
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象
简单来说: 面向对象程序设计就是将一类具体事物的数据和动作整合到一起,即面向对象程序设计
面向对象编程(英语:Object Oriented Programming,简称OOP)是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
简单来说: 面向对象编程就是用定义类+实例/对象的方式去实现面向对象程序设计
Python 2 当中类分为新式类和经典类 Python 3中全部叫新式类
经典类:
class 类名:
pass
新式类:
class 类名(父类):
pass
1 类属性:
1 数据属性: 就是变量
2 函数属性: 就是函数,在面向对象里面也叫方法
注意的是,类和对象都要用点来访问自己的属性
class People:
'''这是一个测试文件'''
china_people = '男'
def __init__(self,name,age):
self.Name = name
self.Age = age
def shoping(self):
print('%s去买东西了' %self.Name)
def test(self,foo):
print('测试%s' %foo)
p = People('小和',22)
#查类的属性字典(__dict__)
print(People.__dict__) #{'__module__': '__main__', 'china_people': '男', '__init__': <function People.__init__ at 0x036347C8>, 'shoping': <function People.shoping at 0x03634660>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>, '__doc__': None}
#找到类中属性字典的test 并且执行;传递一个参数(参数是self需要的
People.__dict__['test'](People) #测试
#查看实例化类的属性字典
print(p.__dict__) #{'Name': '小和', 'Age': 22}
print(p.Name) #小和
print(p.china_people) #男
p.shoping() #小和去买东西了
单独给方法传参
p.test('123')
其他属性:
print(People.__name__) #类名字
print(People.__doc__) #类文档 这是一个测试文件
print(People.__bases__) #父类
print(People.__dict__) #类属性
print(People.__class__) #对应的类
print(People.__module__) #模块
2 查看类属性和实例(对象)属性
实例: dir 和 内置__dict__两种方式
类属性:
#类属性又称静态变量 或者静态数据
#查看类属性
print(People.china_people)
#修改类属性
People.china_people = 'A'
print(People.china_people)
#删除类属性
del People.china_people
#增加类属性
People.location = 'Asia'
print(People.__dict__)
#增加函数属性
def foo(self,f)
pass
People.foo = foo
3 类属性和实例属性修改
class test:
f = '美国'
def __init__(self):
pass
p = test()
#修改实例属性
p.f = '日本'
print(p.f) #--> 日本
#类的属性不变
print(test.f) #--> 美国
4 类的作用域:
people_r = '中国人'
class People:
'''这是一个测试文件'''
people_r = '韩国人'
def __init__(self,name,age):
self.Name = name
self.Age = age
print(people_r) #结果为中国人,因为people_r调用的就是一个变量.不是类里面(也就是加点调用就跟类或者实例有关,不加点就给类和实例无关了,所有这里面打印的是中国人)
P = People('dsadas',12)
注释掉后报错:
#people_r = '中国人'
class People:
'''这是一个测试文件'''
people_r = '韩国人'
def __init__(self,name,age):
self.Name = name
self.Age = age
print(people_r) #中国人
P = People('dsadas',12)
NameError: name 'people_r' is not defined
5 实例/对象属性 和 类属性 区别
class People:
'''这是一个测试文件'''
people_r = '韩国人'
def __init__(self,name,age):
self.Name = name
self.Age = age
def test(self):
print(self.people_r)
P = People('dsadas',12)
P.people_r = '日本人' #修改的是实例本身的,不是修改的类的,也就是init 函数的
P.test() #结果为日本人
print(People.people_r) #结果为韩国人
#上面方式验证的方式 也就是说明了P实例对象后,也就是执行__ini__函数; P.people_r = '日本人' 是修改自身实例化的P内容,并没有修改类里面的其他属性方法;所以执行类里面的数据属性People.people_r 还是韩国人
6 反复强调
加点调用就跟类或者实例有关,不加点就给类和实例无关了