类: 把一类事物的相同特和动作整合到一起就是类,类是一个抽象概论(比如人的特征:升高 年龄; 动作:吃饭睡觉等)

对象: 就是基于上面所说的类创建的一个具体事物(也就是具体存在的,比如一个人)

 

面向对象程序设计(英语: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 反复强调 

   加点调用就跟类或者实例有关,不加点就给类和实例无关了


posted on 2018-05-15 16:58  Python哥  阅读(196)  评论(0编辑  收藏  举报