1. 今日内容
    1、初始化函数
    2、绑定方法与非绑定方法
    3、绑定方法的特殊之处
    4、类的继承
  1. 一、初始化函数
    1、什么是初始化函数
    我们在使用类创建对象时,创建出来的对象都会拥有类中的属性和方法,但是每个对象的属性及方法又不完全相同,
    他们有都有自己的属性及方法,那么如何添加对象特有的属性及方法呢?这时就需要使用到类的初始化方法
    2、类属性及对象属性
    类属性说的是类的属性,其应该是所有对象所共有的属性
    对象属性是每个对象特有的属性,单独存储在对象的名称空间中
  2.  
  3. 3、初始化函数__init__()方法
    init时初始化的英文缩写,__init__方法用于存储对象自己的属性
    在使用类进行实例化对象时,__init__()函数就会执行
    执行__init__()函数必须传入一个参数,这个参数就是对象本身(self)
    __init__()函数没有返回值,其返回值只能是None
  1. 二、绑定方法
    1、什么是绑定方法?
    绑定方法就是将类的方法与对象或类进行绑定
  2.  
  3. 2、绑定方法与普通函数的区别
    绑定方法的函数第一个形参一般是类或者对象本身,在使用类或者对象进行调用时可能不需要为这个参数进行传值,会默认将类或者对象传值给这个参数
    普通函数每个形参必须传入实参。
  4.  
  5. 3、类中的方法一共有几种 分别有什么特点?
    类中的方法一共有三种:
    类绑定方法:@classmethod
    在执行方法时,不管是类进行调用还是对象进行调用都不需要为第一个形参传值
    对象绑定方法:默认就是对象绑定方法
    在执行函数时,如果是类进行调用就是普通函数,需要对第一个形参传入参数,如果是对象调用,就不需要给第一个参数传入参数
    非绑定方法:@staticmethod
    在执行函数时,不管是类还是对象进行调用,有几个参数就需要传入几个值
  6.  
  7. 4、三种方法使用特点:
    如果方法需要类中的数据,则设置为类的绑定方法
    如果需要使用到对象中的数据,就设置为对象的绑定方法
    如果类及对象中的数据都不需要使用,则设置为非绑定方法
  8.  
  9. 5、举例:
  1. class Person:
  2. age = 10
  3. def __init__(self,name):
  4. self.name = name
  5.  
  6. def a(self):
  7. print("我的名字是:%s"%self.name)
  8.  
  9. @classmethod
  10. def b(cls):
  11. print("这个是:%s"%cls.age)
  12.  
  13. @staticmethod
  14. def c(name):
  15. print("my name is %s" %name)
  16.  
  17. p = Person("lee")
  18. p.a()
  19. Person.a(p)
  20.  
  21. p.b()
  22. Person.b()
  23.  
  24. p.c("li")
  25. Person("li")
  1. 三、OOP的三大特性之继承
    1、什么是继承
    继承指的是一种关系,在现实中儿子可以继承父亲的基因等,在python中继承与现实中的继承基本相同
    但是,程序中的继承与现实中的继承又有些许不同,程序中继承表示的是类与类之间的关系
    并且python中子类会继承父类的全部属性及方法
  2.  
  3. 例如b类继承a b类可以直接使用a类中的属性和方法 a是父类(基类,超类) b是子类(派生类)
  4.  
  5. 好处:极大的提高了代码的复用性
  6.  
  7. 2、语法
  1. class Human:
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5.  
  6. def run(self):
  7. print("%s is running"%self.name)
  8.  
  9. class Student(Human):
  10. pass
  11.  
  12. s = Student("lee",18)
  13. s.run()
  1. 3、抽象与继承、object基类
    抽象:就是将子类中共同的属性及方法提取出来,再创建一个公共的父类,在让子类全部继承自公共父类。
  2.  
  3. 在编写程序时要先抽象再继承,这样在编写程序时就是产生一些与业务无关的类,但是这些类时必须的,是为了增加代码的复用性
  4.  
  5. python中所有的类都是有继承关系的类,如果在创建类时没有继承关系,那么系统会默认让此类继承自object类,
    所有的类都会直接或者间接的继承自object
  1. class OldBoyPerson:
  2. school = "oldboy"
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6.  
  7. def say_hi(self):
  8. print("hello i am %s" % self.name)
  9.  
  10. class Teacher(OldBoyPerson):
  11. def teach(self):
  12. print("正在教书......")
  13.  
  14. class Student(OldBoyPerson):
  15. pass
  16.  
  17. # 测试
  18. t = Teacher("owen",38)
  19. t.say_hi()
  20. t.teach()
  21.  
  22. s = Student("歌王",20)
  23. s.say_hi()
  1. 4、名称空间的访问顺序
    在使用类实例化对象时,对象属性及方法的访问顺序为:对象自己的名称空间 -> 自己所属类的名称空间 -> 类的父类的名称空间 -> 父类的父类的名称空间 -> .... -> object的名称空间
  2.  
  3. 5、派生与覆盖
    派生:子类中具有与父类不相同得方法时就叫做派生
    覆盖:
    在继承父类的属性或方法中,如果某些属性及方法不能满足使用的需求,那么就需要对父类的方法进行重写
    重写的方式是:在子类中定义一个与父类同名的函数,再重新写自己的方法
    但是在某些情况下时需要对父类的功能进行扩展,此时就需要完全继承父类的某个方法,再在这个方法的基础上增加新的功能
    此时就需要使用super()来继承父类方法的全部部分,并对其进行扩展
    实例:
  1. class Person:
  2. text = ""
  3. def __init__(self,name,age,gender):
  4. self.name = name
  5. self.age = age
  6. self.gender = gender
  7.  
  8. def sleep(self):
  9. print("人类 午睡 躺着睡!")
  10.  
  11. def say_hi(self):
  12. print("my name :%s my age :%s my gender: %s " % (self.name,self.age,self.gender),end="")
  13.  
  14. class Student(Person):
  15. text = ""
  16. def __init__(self,name,age,gender,number):
  17. #======================================================================重点在这里
  18. # 由于父类已经存在一个方法可以完成这个三参数的初始化
  19. # 所以可以直接调用父类的初始化完成这部分的初始化工作
  20. # 方法1:
  21. # Person.__init__(self,name,age,gender) # 指名道姓的调用
  22.  
  23. # 方法2: 在py2中不支持
  24. super().__init__(name,age,gender)
  25.  
  26. # 方法3: py2的写法
  27. # super(Student, self).__init__(name,age,gender)
  28. self.number = number
  29. #======================================================================
  30.  
  31. # 访问父类的属性
  32. def show_text(self):
  33. print(self.text)
  34. print(super().text)
  35.  
  36. def say_hi(self):
  37. super().say_hi()
  38. print("my number: %s" % self.number)
  39. # print("my name :%s my age :%s my gender: %s my number: %s" % (self.name, self.age, self.gender,self.number))
  40.  
  41. s = Student("jack",20,"man","")
  42. s.say_hi()
  43. # s.show_text()

day24 类的初始化、绑定方法、继承的更多相关文章

  1. Python虚拟机类机制之绑定方法和非绑定方法(七)

    Bound Method和Unbound Method 在Python中,当对作为属性的函数进行引用时,会有两种形式,一种称为Bound Method,这种形式是通过类的实例对象进行属性引用,而另一种 ...

  2. 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖

    今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...

  3. day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

    Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...

  4. python 类的绑定方法和非绑定方法

    一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...

  5. 全面解析python类的绑定方法与非绑定方法

    类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...

  6. python 面向对象之多态与绑定方法

    多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...

  7. Java技术专区-虚拟机系列-类加载机制(类的初始化)

      类加载的生命周期:  加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载       加载 -> 验证 -> 准备 -& ...

  8. springMVC初始化绑定器

    单日期 在处理器类中配置绑定方法  使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型   propertyEditor为属性编辑器,此处我们选用 CustomDateEd ...

  9. python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property

    一.面向对象绑定方法 一.类中定义的函数分成两大类 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 ...

随机推荐

  1. 请求出现Referrer Policy: no-referrer-when-downgrade

    请求出现Referrer Policy: no-referrer-when-downgrade,一直请求不成功,原因是请求连接出现问题,我这里的问题是api前少了/,导致字段和域名拼接起来,所以请求U ...

  2. Window Service安装不成功

    1. 加Winsow Service 2. 加Setup Project    Add -> Project Output , 选中Primary output from Winsow Serv ...

  3. @JsonIgnore等

    作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响. 使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性. 场景模拟: 需要把一个List< ...

  4. 近期将要学习的内容(flag)

    块状链表 左偏树 最大流,最小割 费用流 数位DP 计算几何 主席树 树套树(弃疗) 斜率优化 manacher kmp,exkmp 树链剖分 splay树(只看了理论) Trie树 线段树操作及应用 ...

  5. CentOS7从一般用户切换到root用户

    可以使用如下命令从普通用户切换到root用户: su root 键入回车后,系统提示输入密码(此密码即你平时使用的那个用户的密码.关于这一点我还没有确定是否所有用户都可以切换到root用户身份).验证 ...

  6. copy语法

    copy 和 mutableCopy 一个对象使用copy或者mutableCopy方法可以创建对象的副本 --------------- copy - 需要先实现NSCopying协议,创建的是不可 ...

  7. 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&&最短路

    B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...

  8. Ajax传递复杂对象报415

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. Kafka 实践

    问题描述 配置 Kafka-client 2.x, Spring-Kafka 默认配置 Kafka 三个partition, 使用KafkaListener按group消费. 现象 某天突然发现两个p ...

  10. RHEL 7.6系统安装配置图解教程