类,对象:

  类 具有相似功能的一类事物,人类,犬类,猫类等等。

对象: 类的具体表现

面向对象:

 1、第一个优点:面向对象是一类相似功能函数的集合体

   更清晰化,更规范化

class LoginHandler:  # 登录和注册归属于一类  (calss 驼峰体 结构)
def login(self):
pass
def regisgter(self):
pass
class ShoppingCar:   # 购物车归为一类,含有购物,已购买信息,未购买信息等功能
def shopping(username, money):
pass
def check_paidgoods(username, money):
pass
def check_unpaidgoods(username, money):
pass

ShoppingCar

 2、面向对象,必须要站在上帝角度,去考虑问题

  类其实就是一个公共模板,对象就从具体的模块实例化出来

面向对象的结构:

'''

class 类名():             # 首字母大写,驼峰体,括号可写可不写

  变量部分

  函数(方法)

'''

class Human():
'''
此类主要是定义人类
'''
mind = '有思想' # 静态属性 属性 静态变量 静态字段
language = '会使用语言'
def __init__(self,name,sex,age): # 方法, 函数,动态属性
self.n = name
self.s = sex
self.a = age
def work(self):
print('人类会工作')
def tools(self):
self.color = 'blue'
print('人类会使用工具')
print(Human) # <class '__main__.Human'>

定义一个类

类名:

 类名操作类中的静态属性

  第一种: 类名.__dict__ 方式,查看类中所有内容

print(Human.__dict__)
print(Human.__dict__['mind'])
Human.__dict__['mind'] = '无脑' # 修改无效
print(Human.__dict__)

  第二种:万能的. 可以增删改查类中的静态属性

print(Human.mind)  # 查
Human.mind = '无脑' # 改
print(Human.mind)
del Human.mind # 删
Human.walk = '直立行走'
print(Human.walk)

类名操作类中的方法(除去特殊方法:静态方法,类方法之外,一般不会通过类名执行类中的方法)

对象:

 什么是对象

  只要类名() 这个就是一个实例化过程,就会产生一个对象

obj = Human()

实例化一个对象到底经历了哪些事情?

1、产生一个对象空间。

print(obj)  # <__main__.Human object at 0x0000019BC6A0F828>

2、自动执行类中的__init__方法(init函数)并且将这个对象空间传给self

3、在__init__中通过self给这个空间添加属性,并且返回

 对象操作对象空间的属性

obj = Human('小胖', '男', 20)

  #1、 obj.__dict__ 查询对象中所有的属性

print(obj.__dict__)

  #2、 通过万能的. 的方式操作对象中的单个属性

# 增 删 改 查
obj = Human('echo', 'male', 26)
obj.job = 'IT' # 增
# print(obj.__dict__)
# del obj.job # 删
# print(obj.__dict__)
# obj.s = 'woman' # 改
# print(obj.__dict__)
print(obj.s) # 查

  #3、对象可以查询类中的属性

print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)

  4、对象可以执行类中的方法

   对象执行类中的所有方法(除去3个特殊方法)Python解释器都会将对象空间主动传给方法的第一个参数self

obj.work()

self:类中方法的第一个形参约定俗成写self,便于统一,self接受的就是对象空间

多个对象:

xiaopang = Human('小胖', '男', 20)
xiangye = Human('相爷', '男', 18)
print(xiangye,xiaopang) # <__main__.Human object at 0x00000223FE0E8B38> <__main__.Human object at 0x00000223FE0E8B00>
print(xiaopang.__dict__) # {'n': '小胖', 's': '男', 'a': 20}
print(xiangye.__dict__) # {'n': '相爷', 's': '男', 'a': 18}

day 18 类,对象的更多相关文章

  1. 18.Java 封装详解/多态详解/类对象转型详解

    封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...

  2. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  3. C++中派生类对象的内存布局

    主要从三个方面来讲: 1 单一继承 2 多重继承 3 虚拟继承 1 单一继承 (1)派生类完全拥有基类的内存布局,并保证其完整性. 派生类可以看作是完整的基类的Object再加上派生类自己的Objec ...

  4. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  5. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  6. 用cglib包来为类产生动态代理类对象

    一:在JDK里也有动态代理的类和接口,是Proxy和InvocationHandler,但是Proxy只能为接口产生代理类,借助InvocationHandler的实现类来完成对类对象的代理: 但是在 ...

  7. 对C++对象内存模型造成的影响(类/对象的大小)

    首先重新回顾一下关于类/对象大小的计算原则: 类大小计算遵循结构体对齐原则 第一个数据成员放在offset为0的位置 其它成员对齐至min(sizeof(member),#pragma pack(n) ...

  8. static 成员变量、static 成员函数、类/对象的大小

    一.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量 ...

  9. python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  10. C++ 类对象和 指针的区别

    C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...

随机推荐

  1. Context namespace element 'annotation-config' and its parser class [org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser] are only available on JDK 1.5 and higher

    Context namespace element 'annotation-config' and its parser class [org.springframework.context.anno ...

  2. Java中Asm包有什么用?

    ASM能做什么 我们都知道,一般情况下,Class文件是通过javac编译器产生的,然后通过类加载器加载到虚拟机内,再通过执行引擎去执行. 现在我们可以通过ASM的API直接生成符合Java虚拟机规范 ...

  3. SIGCHLD信号

    SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 也就是说:子进程的运行状态发生变化就会发送SIGCHILD信号:这里的意思 ...

  4. linux 再多的running也挡不住锁

    再续<linux 3.10 一次softlock排查>,看运行态进程数量之多: crash> mach MACHINE TYPE: x86_64 MEMORY SIZE: GB CP ...

  5. wx小程序自定义组件与页面之间参数传递

    在开发中,很多页面中会使用相同的组件,这时可以将具有相同信息的部分封装成一个组件,方便开发中调用.在调用中可能会涉及到数据的传递问题,例如页面与组件,组件与组件直接的数据传递. 首先看看页面与组件直接 ...

  6. Linux find命令使用方法

      Linux中find命令用来在指定目录下查找文件.通过组合不同参数可以在linux系统中快速查找需要的文件或目录. find命令语法 格式:find pathname -options [ -pr ...

  7. ArcGIS案例学习笔记4_2_水文分析批处理地理建模

    ArcGIS案例学习笔记4_2_水文分析批处理地理建模 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 概述 计划时间:第4天下午 目的:自动化,批量化,批处理,提 ...

  8. javascript中 Array.prototype.slice的用法.

    首先看到 www.w3school.cn上的解释:http://www.w3school.com.cn/jsref/jsref_slice_array.asp 定义和用法 slice() 方法可从已有 ...

  9. 初探 objc_msgSend函数

    1.0 执行某个对象的方法    [receiver message] 被编译为: id objc_msgSend(id self,SEL op,...): objc_msgSend 发送信息的过程 ...

  10. 吴裕雄 21-MySQL 正则表达式

    MySQL 正则表达式在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配.MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表 ...