Python之面向对象类和对象

  定义一个类:class

  定义类的语法:

class Test(object):
"""
类里定义一类事物共同的技能。
可以是变量,也可是函数。
"""
camp = "Demacia"
def attack(self):
print("attack")

  如何使用类:类的用法----实例化和引用自己的属性

    一、内置类

        例如int() 加参数就能用。

        x=int(10)

        print(x)

    二、实例化

       定义的Test类,加括号。就是将Test类 变成一个具体的对象 Test()。

       所以,obj = Test()是将一个抽象的类Test,变成一个具体的对象的过程。这个过程就叫实例化。

    三、引用类的方法,类的特征(类的变量),类的技能(类的函数)

      print(Test.camp) 引用Test类里camp变量的值。demacia

      Test.attack(5578)

#一:实例化
# x=int(10)
# print(x) # obj=Garen() #实例化
# print(obj) #二:引用类的特征(类的变量)和技能(类的函数)
# print(Garen.camp)
# print(Garen.attack)
# Garen.attack(1231231)

  如何使用实例:

  g1 = Test() 这样就是一个实例。将Test类实例了。对于g1来说,就是一个具体的存在对象。

#如何使用实例
class Test:
camp='Demacia' def __init__(self,nickname):
"""
init的作用:self.nick是给自己定义了一个别名,叫nickname
实例化Test(),就会自动触发__init__方法的执行。
:param nickname:
"""
self.nick=nickname #g1.nick='草丛伦'
def attack(self,enemy):
# print('---------->',self.nick) #g1.nick
print('%s attack %s' %(self.nick,enemy)) g1=Test('草丛伦') #Test.__init___(g1,'草丛伦')
g2=Test('猥琐轮')
print(g1.nick)
g1.attack('George') print(g1.nick)
print(g1.camp)
print(g1.attack)
print(Test.attack) Test.attack() #调用的是函数,
g1.attack() #self=g1 g1.attack是一种以绑定方法,调用attack的方式
Test.attack(g1) # print(g2.nick)
# print(g2.camp)

    Test.attack() 和g1.attack() 的区别:

         Test.attack()是调用的attack的函数。由类去调用就没有对象那种自动传值的功能

         g1.attack() 是g1绑定attack函数这个方法,会将g1自己作为第一个参数,传给后面的方法 (自动传值)。

  self的作用:

    由对象触发的,就有自动传值的功能。

    self就是对象自己。

    

#总结:
#类:一:实例化,二:引用名字(类名.变量名,类名.函数名)
#实例:引用名字(实例名.类的变量,实例名.绑定方法,实例名.实例自己的变量名) class Garen:
camp='Demacia' def __init__(self,nickname):
self.nick=nickname #g1.nick='草丛伦'
def attack(self,enemy):
# print('---------->',self.nick) #g1.nick
print('%s attack %s' %(self.nick,enemy)) # print(Garen.camp) #查
# Garen.camp='aaaaaa' #改
# print(Garen.camp)
#
# # del Garen.camp #删除
# # print(Garen.camp)
#
# Garen.x=1
# print(Garen.x) g1=Garen('George')
# print(g1.nick)
# g1.nick='asb'
# print(g1.nick)
# del g1.nick
# print(g1.nick) # g1.sex='female'
# print(g1.sex)

  面向对象的程序设计OOD

     找对象 ----》找类(归纳对象共同的特征与技能,还有每个对象独有的特征)

   面向对象编程OOP

     先定义类 ---》实例化出对象

   面向对象分析OOA

   面向对象测试OOT

   面向对象维护OOSM

   定义学生类:
    特征:共同国籍(China)
    技能:查看成绩   独有的特征:ID,名字,性别,省。
# #OOD
# #定义学生类:
# #特征:共同国籍(China)
# #技能:查看成绩
# #独有的特征:ID,名字,性别,省。 # #OOP
class Student():
country = "China"
def __init__(self,ID,NAME,SEX,PROVINCE):
self.id = ID
self.name = NAME
self.sex = SEX
self.province = PROVINCE def search_score(self):
"""
查询分数技能
:return:
"""
print("tell score")
def study(self):
"""
学习技能
:return:
"""
print('study') ##类的用法:
##类的实例化,属性引用
s1 = Student("",'george','man','neimeng')
s2 = Student("",'wang','man','neimeng') ##类的属性: 特征(变量)和技能(函数,绑定方法)
s1.search_score()
s2.search_score()
s1.study()
print(Student.country)
print(Student.__init__)
print(Student.study) Student.__init__(s1,2,3,4,5) #这样是调函数 Student.study(s1) #类查看自己的属性。 Student.x =1 #给类增加一个属性。

  什么是对象,什么是类:

     在一个游戏中,每个玩家选一个英雄,每个英雄都有自己的特征和技能,特征既是数据属性,技能既是方法属性。特征与技能的结合就是一个对象。

    从一组对象中提取相似的部分就是类,类所有对象都具有的特征和技能的结合体。

  在Python中,用变量表示特征,用函数表示技能,因而类是变量与函数的结合体,对象是变量与方法(指向类的函数)的结合体。

  在Python3中,统一了类与类型的概念。类型和类就是一个。class。

在Python2中,分为新式类和经典类。在Python3中,都是统一的新式类。

  新式类和经典类声明的最大不同在于,所有新式类必须继承至少一个父类。

  所有类不管是不是显示声明父类,都有一个默认继承的object父类。父类也叫基类,基础的意思。

  可用 类名.__bases__ 来查看类都继承了那些父类。

  在Python2中的类的区别:

  经典类:

  class 类名:

    pass

  新式类:

  class 类名(父类):

    pass

   

在类的 __init__ 函数里不能有return的返回值。  在元类里详细说明。

对象的使用:

   对象也成为实例,

class Test(object):
pass T = Test() #对象T就是类Test的实例。

  对象的用法: 

    只有属性引用。

  对象的属性:

   对象本身就只有特征(变量)

class Test(object):
def __init__(self,id,name):
self.id = id
self.name = name def A(self):
pass T = Test()
print(T.id,T.name) #对象可以引用类的变量。

查看类的名称空间和对象的名称空间:

  类的名称空间:

    类名.__dict__

  对象的名称空间:

    对象.__dict__

  在 Test.A 和 T.A 是不一样的内存地址。

  绑定方法的核心在于“绑定”,唯一绑定一个确定的对象。

基于面向对象开发:

#应用场景
#找不到共同特征和技能不用强求 #对象:学校----->归类
#共有的特征:商标为etiantian
#共有的技能:招生
#独有的特征:地址不一样,老师们,课程 class School:
tag='etiantian'
def __init__(self,addr):
self.addr=addr
self.teacher_list=[]
self.course_list=[] def zhaosheng(self):
pass #对象:老师---->归类
#共同的技能:教课
#独有的特征:名字,性别,level,课程 class Teacher: def __init__(self,name,sex,level):
self.name=name
self.sex=sex
self.level=level
self.course_list=[] def teach(self):
pass #对象:学生---->归类
#共同的特征:
#共同的技能:search_score,handin
#独有的特征:学号,名字,性别,课程
class Student:
def __init__(self,ID,name,sex):
self.id=ID
self.name=name
self.sex=sex
self.course_list=[]
def search_score(self):
pass def handin(self):
pass class Course:
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period s1=Student('','sun','female')
# print(s1.id,s1.name,s1.sex)
# print(s1.course_list)
# s1.course_list.append('python')
# s1.course_list.append('linux')
# print(s1.course_list) python_obj=Course('python',15800,'7m')
linux_obj=Course('linux',19800,'2m') s1.course_list.append(python_obj)
s1.course_list.append(linux_obj)
# print(s1.course_list) print('''student name is:%s
course name is :%s
course price is :%s
''' %(s1.name,s1.course_list[0].name,s1.course_list[0].price))

    

Python之面向对象类和对象的更多相关文章

  1. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  2. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  3. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  4. python面向对象——类和对象

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a ...

  5. python面向对象:类空间,对象空间, 组合

    一. 类空间,对象空间 1. 类空间,对象空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变 ...

  6. Python里的类和对象简介

    ---恢复内容开始--- Python里的类  对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...

  7. Python学习笔记——类和对象

    类和对象 1. 一个例子 # 对象 = 属性 + 方法 # Python 中的类名称约定首字母大写,而 Python 函数名首字母小写 class Turtle: #属性 color = 'green ...

  8. python(面向对象-类封装调用)

    一.面对对象思想 (1)大家肯定听过 Python 中”一切皆对象“的说法,但可能并不了解它的具体含义,只是在学习的时候听说 Python 是面向对象的编程语言,本节将向大家详细介绍 Python 面 ...

  9. C#编程语言与面向对象——类与对象

    由于ASP.NET技术是全面向对象的,因此,要掌握这一技术,必须具备有扎实的面向对象理论基础 使用C#编程,所有的程序代码几乎都放在类中,不存在独立于类中之外的函数,因此,类是面向对象编程的基本单元 ...

随机推荐

  1. bzoj 3784: 树上的路径【点分治+st表+堆】

    参考:https://www.cnblogs.com/CQzhangyu/p/7071477.html 神奇的点分治序(或者叫点剖?).就是把点分治扫过的点依次放进队列里,然后发现,对于每一棵树摊到序 ...

  2. 如何管理第三方接口token过期时间

    背景: 随着微服务的盛行,做开发时不可避免的要涉及第三方接口,安全起见,这些接口都会需要一个token参数.而token一般都会有一个过期时间,比如2小时或者30分钟.那么如何在自己的应用中存储并管理 ...

  3. Luogu P2920 时间管理【二分答案】

    二分答案水题. (像我这么蒻的人都能十几分钟A掉) https://www.luogu.org/problemnew/show/P2920 开始时间一定在从0到min(t[i]-s[i])的一段区间上 ...

  4. PhpStorm Xdebug远程调试环境搭建原理分析及问题排查

    2017年05月26日  经验心得 目录   一. 环境介绍 二. 远程环境配置 2.2 Xdebug安装 2.3 配置 三. 本地phpstorm配置 3.1 下载远程代码 3.2 添加php解释器 ...

  5. 洛谷 P3368 【模板】树状数组 2(区间修改点查询)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  6. 字符串处理 Codeforces Round #285 (Div. 2) B. Misha and Changing Handles

    题目传送门 /* 题意:给出一系列名字变化,问最后初始的名字变成了什么 字符串处理:每一次输入到之前的找相印的名字,若没有,则是初始的,pos[m] 数组记录初始位置 在每一次更新时都把初始pos加上 ...

  7. C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

    原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...

  8. 桥接模式和php实现

    桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模 ...

  9. mac系统 usr/ 目录下无法新建文件夹???

    这个问题是在操作mongodb的时候遇到的,很苦恼.目前已经解决,将解决方法分享给各位遇到同样问题的你们. 1.重启电脑,开始关机就立马按住command+R,进入macOS恢复功能界面,进入的时间可 ...

  10. 关于Android软键盘把布局顶上去的问题(一)

    最近接触到了一个登陆页面,布局最上面显示的是一个波纹的view,中间显示账号和密码的EditText,紧接着还有一个Button: 希望:点击EditText时,软键盘不能把波纹的view顶出去,也不 ...