python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识
我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里。但用面向过程的方法去写程序,只能实现一个功能,我们要实现很多功能时,需要写很多个代码块,每一个代码块的作用域都是全局的,要相对一个功能进行改动,还要考虑与其它代码块的联系,这样就造成了代码的可扩展性和维护性。那么装到函数里就好了吗?装到函数里变量只能作用于函数里,其他的函数无法使用到该函数的变量。这时可以用面向对象的程序设计方法解决这些问题。面向对象的核心是对象,用对象来操控类里面的方法(函数)和变量,加上类还具有继承、封装、多态三大特性,提高了代码的复用性和规范性。
二. 类,对象
1. 类
语法: class 类名:
类体
类体:两部分:变量部分(静态变量),方法(函数)部分
#定义一个类
class name:
pass
2. 对象
类名()就是对象, 类名()的这个过程:实例化的过程(创建一个对象的过程),
class name:
pass
name() # 对象创建
三. 类,对象调用类中的变量和方法.
1. 类调用类中的变量和方法
(1) __dict__方法(操作类中的静态变量):只能查询不能增、删、改。
class Person:
mind = '有思想'
belif = '有信仰'
animal = '高级动物' print(Person.__dict__) # 查询类Person中所有的内容,展现形式是字典.
print(Person.__dict__['belif']) # 查询类Person中的变量'belif'
# Person.__dict__['belif'] = '无信仰' # 修改变量'belif'的值会报错
(2). 万能的点: .
class Person:
mind = '有思想'
belif = '有信仰'
animal = '高级动物'
def work():
print('')
def money():
print('') print(Person.animal) # 高级动物
print(Person.mind) # 有思想
Person.mind = '没有思想' # 修改变量'mind'的值,可以通过Person.__dict__查看修改后的内容
Person.pay = '货币交换' # 增加变量'pay'和它的值,可以通过Person.__dict__查看增加后的内容
Person.say = '语言交流'
print(Person.work()) # 也可以调用类中的方法(函数),一般不用类名去操作
print(Person.__dict__) # 查看类中所有的内容
2. 对象调用类中的变量和方法
__init__方法是一个特殊的方法,只要类名+() 产生一个对象,自动执行类中的__init__方法,并把类的地址传给方法里的第一个参数,约定把第一个参数定为'self', 再给对象封装相应的属性.
(1) __dict__ 查询对象中的所有的内容
(2) 万能的点: .
class Person:
mind = '有思想'
belif = '有信仰'
animal = '高级动物'
def __init__(self, name,age,hobby):
self.name = name
self.age = age
self.hobby = hobby
print(name,age,hobby)
def work(self):
print('会工作')
return self
def money(self):
print('会消费')
print(self) ret = Person('jack',22, '敲键盘') # 类名+() 的这个过程:实例化的过程(创建一个对象的过程)
# jack 22 敲键盘
print(ret) # Person()创建一个对象空间,把这个空间的地址赋值给ret
# <__main__.Person object at 0x0000021248F46550>
print(ret.__dict__) # 查询对象中所有的内容: {'name': 'jack', 'age': 22, 'hobby': '敲键盘'}
print(Person.work(111)) # 调用方法,并把111传给self,(一般通过对象调用类的方法,而不是类)
# 会工作 # # print(Person.money()) 类调用方法时不传参数会报错
ret.work() # 对象可以直接调用类中的方法不用给self传参
# 会工作
python: 面向对象:类和对象调用类中的变量和方法的更多相关文章
- OC 对象调用属性或实例变量或方法的细节。
1.成员变量可以理解为所有在类的头上声明的,无论是@interface.@implementation下用大括号括起来或者是用@property声明的变量都可以称作这个类的 成员变量,只是在@impl ...
- c++中的类的对象与类的指针
以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...
- 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!
前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...
- C++类的对象和类的指针的区别
#include <iostream> #include <string> using namespace std; class Student { public: stati ...
- 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字
在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. package text; class Parent { int x; public Parent() { ...
- java中static变量和方法的总结
转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...
- Qt中静态变量使用方法
静态变量可以在各个页面之前使用 先定义一个用于存放静态变量的类 例如datavar 在datavar.h中添加如下代码 #ifndef DATAVAR_H #define DATAVAR_H #inc ...
- WOE:信用评分卡模型中的变量离散化方法(生存分析)
WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老.中.青三组,一般的做法是ROC或者X-tile等等. ...
- Python面向对象篇(1)-类和对象
面向对象编程 1.编程范式 我们写代码的目的是什么?就是为了能够让计算机识别我们所写的代码并完成我们的需求,规范点说,就是通过编程,用特定的语法+数据结构+特殊算法来让计算机执行特定的功能,实现一 ...
随机推荐
- Maven 整理总结(一)
使用maven来,今天对maven的使用进行一下总结.总经过程中,参考到的资料,我会尽量列举在下面,如果有涉及侵权的问题,挺联系我,我立即改正. 孤傲苍狼博客 http://www.cnblogs.c ...
- openresty 集成 keycloak-oauth-oidc
keycloak 是一个比较全,而且比较方便的sso 解决方案,同时为我们提供了灵活的扩展特性 备注: 测试使用docker-compose 运行,对于keycloak 使用pg 数据库做为后端存储 ...
- sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git cl ...
- C# 获取机器码
using System.Runtime.InteropServices; using System.Management; using System; public class HardwareIn ...
- Hi3518EV200音频相关
1.sample程序可以录音,音频格式为G711A.G711U.G726.ADPCM: 2.ADPCM找不到音频播放器 3.G711格式海思添加了4字节头0x00 0x01 0x0a 0x00,普通播 ...
- 怎么检测浏览器有没有flash播放器
虽然现在大多浏览器都支持了HTML5的新特性,可以直接在网页上播放视频,通过<video>标签即可,但是大多数的浏览器对H5支持还是不够完整,或者很多用户还没有把浏览器升级到最新的版本,尤 ...
- py-day1-1 python的基本运算符和语句
整体注释: 选中目标 ctrl + ? 基础: 运算符: ** 表示幂函数 in 和 not in : 比较运算符: 基本语法: pass 代表空代码,无意义,仅仅用于表示代码块: 引 ...
- Jmeter--报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
今天要用Jmeter测试服务器性能,发现GUI界面总是有warning提示: WARNING: Could not open/create prefs root node Software\JavaS ...
- Redis 键命令
1.设置key值 set name zhangsan 删除key del name 2. 判断key是否存在 exists a,返回1 说明存在: 0 表示不存在 3. 剩余过期时间 ttl 返回- ...
- 如何使用Hanlp加载大字典
问题 因为需要加载一个 近 1G 的字典到Hanlp中,一开始使用了CustomDictionay.add() 方法来一条条的加载,果然到了中间,维护DoubleArraTre 的成本太高,添 ...