类和方法

name = "Jack"
city = "bejing"
print("my name is %S and come from %s "%(name,city))
print ("hello 51zxw") name = "harry"
city = "shengzhen"
print("my name is %S and come from %s "%(name,city))
print ("hello 51zxw") 思考几个问题?如果班上有50个同学依次上面形式介绍怎么办? 类与对象 人类
属性:地域、肤色、国家
功能: 走路、思考、饮食、跑
具体对象:中国人、非洲人
学生 属性:姓名、学号、城市、年龄
功能:听、读、写、说
具体对象:jack同学、harry同学
三大特殊:封装、继承、多态 定义一个学生的类
class Student(object):#括号不写默认也是object,可写可不写
  def _init_(self,name,city): #构造函数
    self.name = name #self相当于是是一个孩子,把名字绑定在这个孩子身上
    self.city = city
    print ("my name is %s and come from %s %(name,city)")
  def talk(self):
    print ("hello 51zxw")
生成实例对象
stu1 = Student("jack","beijing")#创建对象
stu1.talk() #对象调用方法
stu2 = Student("harry",shengzhen)
stu2.talk()
输出结果:

name is jack and come from beijing
hello 51zxw

例二:

class A():
def add(self,a,b):
return a+b count = A()
print (count.add(3,5))
输出结果:
8

例三

class A():
def _init_(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a+self.b
count = A(3,4)
count.add()
输出结果:
7
"""解析:当调用A类时首先执行_init_方法,所以需要对其进行传参,初始化做的事就是将输入的类型化为整型,而add()可以直接拿初始化的self.a self.b进行计算,调用add()时不需要再进行传参"""

类的继承

class A():
def add(self,a,b):
return a+b class B(A):
def sub(self,a,b):
return a-b
print (B().add(3, 4)) #调用父类方法
输出结果:
7
print (B().sub(3, 4))#调用自己的方法
输出结果:
-1
先创建了A类,又创建了B类,B类继承了A类,所以B可以调用A类的方法

 Super的用法

"""
在类的继承中,重定义某个方法,该方法会覆盖爷类同名的方法,但有时,我们希望能用爷类的功能
,需要调用爷类的方法,用Super来实现
"""
class A(object):
def __init__(self,name):
self.name = name
def greet(self):
print "hello ,I am %s"%self.name
class B(A):#继承A的方法
def greet(self):
super(B,self).greet()#与A类有同名方法时,又不希望覆盖A类方法使用Super
print "wangwang" dog = B("cat")
dog.greet()

输出结果:
hello ,I am cat
wangwang """
super是在子类中调用父类的初始化方法
""" class B1(object):
def _init_(self,a,b):
self.a = a
self.b = b class A1(B1): #继承父类
def __init__(self,a,b,c):
super(A1,self)._init_(a,b)#继承父类构造方法,又自己添加新方法,用supper
self.c = c

涉及到多重继承

class Base(object):
def __init__(self):
print "enter Base"
print "leave Base" class A(Base):
def __init__(self):
print "enter A"
super(A, self).__init__()
print "leave A" class B(Base):
def __init__(self):
print "enter B"
super(B,self).__init__()
print "leave B" class C(B,A,):
def __init__(self):
print "enter c"
super(C,self).__init__()
print "leave c" c1 = C()
"""
子类永远在父类的前面
如果有多个爷类,会根据它们在列表中的顺序执行 """

输出结果:

enter c
enter B
enter A
enter Base
leave Base
leave A
leave B
leave c

  

  

python 类和方法(面向对象)的更多相关文章

  1. python类及其方法

    python类及其方法 一.介绍 在 Python 中,面向对象编程主要有两个主题,就是类和类实例类与实例:类与实例相互关联着:类是对象的定义,而实例是"真正的实物",它存放了类中 ...

  2. Python类,域,方法,对象,继承

    类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...

  3. Python类基础知识(面向对象基础)

    #首先 我们需要了解 面向过程是什么 面向对象是什么 我们为什么需要使用面向对象 面向过程:根据业务逻辑从上到下写垒代码 面向对象:根据代码对函数进行分类和封装 区别:解决问题的逻辑不同,但是都能解决 ...

  4. python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)

    网上有很多同义但不同方式的说法,下面的这个说法比较让你容易理解和接受 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(meth ...

  5. Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别

    先看两个类的方法: >>> class nc(): def __init__(self): self.name ='tester' #name变量加self >>> ...

  6. 第8.7节 Python类__new__方法和构造方法关系深入剖析:__new__方法执行结果对__init__的影响案例详解

    一. 引言 前面章节介绍了类中的构造方法和__new__方法,并分析了二者执行的先后顺序关系.__new__方法在__init__方法前执行,__new__方法执行后才返回实例对象,也就是说__new ...

  7. python - 类的方法

    类的方法分为:普通方法. 静态方法和类方法   调用方式 特征 普通方法 由对象去调用执行,属于类 至少一个self,对象调用 静态方法 属于类,但通过类来调用,不依赖于任何对象,方法内部不需要对象封 ...

  8. Method Resolution Order – Python类的方法解析顺序

    在支持多重继承的编程语言中,查找方法具体来自那个类时的基类搜索顺序通常被称为方法解析顺序(Method Resolution Order),简称MRO.(Python中查找其它属性也遵循同一规则.)对 ...

  9. python类中方法加单下划线、双下划线、前后双下滑线的区别

    首先看一段代码: class Foo(): def __init__(self): print "__init__ method" def public_method(self): ...

随机推荐

  1. Win10 安装MySQL 5.7.32(解压版)

    Win10 安装MySQL 5.7.32(解压版) MySQL 5.7.32 下载 官网下载(速度慢,不推荐使用):https://dev.mysql.com/downloads/mysql/ 清华镜 ...

  2. java8的stream功能及常用方法

    Java8中stream对集合操作做了简化,用stream操作集合能极大程度简化代码.Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后就用尽了. 一. ...

  3. 来看看面试必问的HashMap,一次彻底帮你搞定HashMap源码

    HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node<K,V> implem ...

  4. 修改pycharm中的flask项目名遇到的坑

    曾修改过自己的项目名,并在settings中的解释器也更正过来了.然后执行pip list 报错: failed to create process. 解决方法如下: 到你的项目的venv目录下的Sc ...

  5. guitar pro系列教程(十九):Guitar Pro添加音符之前我们要做什么?

    前面的章节我们已经讲了不少关于{cms_selflink page='index' text='Guitar Pro'}的功能之类的讲解,那一般我们在打谱之前要做的是什么呢,很多新手玩家,对这方面也是 ...

  6. 对于AQS的理解

    1.JUC包中的 CountDownLatch.CyclicBarrier.ReentrantLock和Semaphore都是基于AQS(AbstractQuenedSynchronizer)实现的 ...

  7. Non Super Boring Substring 题解(hash+思维)

    题目链接 题目大意 给你一个长度为d(d<=1e5)的字符串,要你求有多少个子串满足这个子串不包含长度大于等于k的回文子串 题目思路 首先可以hash预处理,然后O(1)用前缀hash值和后缀h ...

  8. libev使用方法

    1. libev简介 libev是个高性能跨平台的事件驱动框架,支持io事件,超时事件,子进程状态改变通知,信号通知,文件状态改变通知,还能用来实现wait/notify机制.libev对每种监听事件 ...

  9. Beta冲刺随笔——Day_Seven

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...

  10. unittest框架中读取有特殊符号的配置文件内容的方法-configparser的RawConfigParser类应用

    在搭建Unittest框架中,出现了一个问题,配置文件.ini中,出现了特殊字符如何处理? 通过 1.configparser的第三方库对应的ConfigParser类,无法完成对特殊字符的读取: # ...