一、类的定义
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
 
对象:类实例化出来的叫做对象
 
对象和类的关系:类和对象的关系就像模具和铸件的关系,类的实例化的结果就是对象,而对对象的抽象就是类。
 
类和实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如 Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
 
仍以 Student 类为例,在 Python 中,定义类是通过 class 关键字:
class Student(object):
    pass

class 后面紧接着是类名,即 Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用 object类,这是所有类最终都会继承的类。

1.类定义:
  • class定义类
  • class 后面加 类名称 加 () 加 :

2.类名称定义规范:

  • 不要以纯数字命名
  • 不要以python中保留字符(关键字)来命名
  • 不要以文件名命名
  • 不能出现特殊字符
  • 要简短且见名知义
  • 当类名称中有多个单词时,应采用驼峰式(每个单词首字母大写) --> XinFangShuo()

定义好了 Student 类,就可以根据 Student 类创建出 Student 的实例,创建实例是通过类名+()实现的:

bart = Student()

可以看到,变量 bart 指向的就是一个 Student 的实例,而 Student 本身则是一个类。

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把 name,score 等属性绑上去:
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score        

注意:特殊方法“__init__”前后分别有两个下划线!!!

注意到__init__方法的第一个参数永远是 self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。
 
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但 self 不需要传,Python 解释器自己会把实例变量传进去:

 bart = Student('Bart Simpson', 59)

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量 self,并且调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认

参数、可变参数、关键字参数和命名关键字参数。
 
class Four():           #类的定义
    def sub(self,x,y):
        return x + y

"""
class Dog():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def sit(self):
        print (self.name.title() + ' ' + "is now sitting")

    def roll_over(self):
        print (self.name.title() + ' ' + "is now roll over")

my_dog = Dog('willie',6)    #参数实例化
# your_dog = Dog('lucy',3)
my_dog.sit()
my_dog.roll_over()
"""

"""
class Four_operations():
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)
    def add(self):
        return self.a + self.b

    def reduce(self):
        return self.a - self.b

    def ride(self):
        return self.a * self.b

    def Except(self):
        return self.a / self.b

operation = Four_operations('12','4')
print (operation.add())
print (operation.reduce())
print (operation.ride())
print (operation.Except())
"""
class ReadWrite():
    """
    txt文件读取类
    """

    def __init__(self,filepath):
        self.filepath = filepath

    def read(self,index=0):
        with open(self.filepath) as book:
            return book.read().splitlines()[index]

    def write(self,body):
        with open(self.filepath,"w") as book:
            book.write(body)

ReadWrite("d:\\test1.txt").write("大家好,我是郑迎!")
print (ReadWrite("d:\\test1.txt").read())
#coding=utf-8

mysql = {"}

class LoginRegister():
    """
    登录注册函数封装实现如下:
    1.登录mysql中的账号密码成功
    2.密码错误则重新输入密码
    3.账号错误调用注册方法进行注册,注册成功后调用登录方法登录已注册的账号
    """
    def login(self):
        user = input("username:")
        if user in mysql.keys():
            for i in range(3):
                pwd = input("password:")
                if pwd == mysql.get(user):
                    print ("Login ok")
                    break
                else:
                    print ("密码输错三次,将锁定账号!")
        else:
            print ("Please register first!")
            LoginRegister().register()

    def register(self):
        user = input("Input you username:")
        while True:
            pwd = input("Input you password:")
            repwd = input("Input you password again:")
            if repwd == pwd:
                mysql.setdefault(user,pwd)
                print ("Register ok,sign in now!")
                LoginRegister().login()
                break
            else:
                print ("两次密码不一致,请重新输入!")

LoginRegister().login()
 二、类的调用
 调用类下的方法,必需通过类的的实例/类名()进行调用
  • 当类中初始化方法__init__中存在参数时,则在实例化时,需要往实例括号中传入参数
  • 当类中无初始化方法或者__init__中不存在参数时,则在实例化时,不需要往实例括号中传入参数,而在调用方法时再进行传参
class Four():
    def sub(self,x,y):
        return x + y

print Four().sub(2,3)

class Four_operations():
    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)
    def add(self):
        return self.a + self.b

    def reduce(self):
        return self.a - self.b

    def ride(self):
        return self.a * self.b

    def Except(self):
        return self.a / self.b

operation = Four_operations(')        #实例化
print (operation.add())
print (operation.reduce())
print (operation.ride())
print (operation.Except())
 三、继承
1.单继承和多继承
  • 一个对象使用另一个对象的属性和方法,被继承的类也称父类
  • 多重继承就是一个子类继承多个父类
class Four():
    def sub(self,x,y):
        return x + y

class Five(Four):       #Five类继承了Four类 --> Five 类拥有了 Four 类下的所有函数方法
    def jian(self,a,b):
        return a - b

print (Five().sub(2,5))
class Father():
    def __init__(self,name,sport,sex):
        self.name = name
        self.sport = sport
        self.sex = sex
    def Surname(self):
        print (self.name + "姓张")
    def hobby(self):
        print (self.name + "like" + " " + self.sport)

class Son(Father):
    def study(self):
        print (self.name + " " + "study very good")
    def Sex(self):
        print (self.name + " " + "is" + " " + self.sex)
so = Son('张四',"play basketball","boy")
so.Surname()
so.hobby()
so.study()
so.Sex()
class car():
    "多继承"
    def __init__(self,brand,type,year,mileage):
        self.brand = brand
        self.type = type
        self.year = year
        self.mileage = mileage
    def make(self):
        print (self.brand + self.type + "是" + str(self.year) + "生产的!")

    def update_mileage(self,mile):
        if mile < self.mileage:
            print ("请勿修改里程数!")

class aircraft():
    def __init__(self,name,destination):
        self.name = name
        self.destination = destination
    def bound(self):
        print (self.name + "开往" + self.destination)

class boat(car,aircraft):
    def __init__(self,brand,type,year,mileage,name,destination):
        self.brand = brand
        self.type = type
        self.year = year
        self.mileage = mileage
        self.name = name
        self.destination = destination
my_boat = boat("泰坦","尼克号",2010,500,"泰坦尼克号","宁波")
my_boat.make()
my_boat.bound()
 四、多态(重写父类方法)
class Four():
    def sub(self,x,y):
        return x + y

class Five(Four):       #Five类继承了Four类 --> Five 类拥有了 Four 类下的所有函数方法
    def jian(self,a,b):
        return a - b

    def sub(self,x,y):
        return x * y

print (Five().sub(3,6))
 

python(类的封装调用/继承/多态)的更多相关文章

  1. python第三十一天-----类的封装、继承,多态.....

    封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. cla ...

  2. python类的封装与继承

    封装 关注公众号"轻松学编程"了解更多. 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义本身就是封装的体现. 狭义的封装:一个类的某些属性, ...

  3. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  4. python面向对象(封装、继承、多态)+ 面向对象小栗子

    大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...

  5. Java—类的封装、继承与多态

    一.类和对象 1.类 类是数据以及对数据的一组操作的封装体. 类声明的格式: 类声明 { 成员变量的声明: 成员方法的声明及实现: } 1.1 声明类 [修饰符] class 类<泛型> ...

  6. java类的封装、继承、多态

    一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...

  7. c++的类的封装/继承/多态的简单介绍

    本篇文章仅仅从很表层来介绍一个C++语言中的类,包括什么是类,类的封装性/继承性和多态性.高手直接跳过吧,看了浪费时间,新手或者想温习一下的可以浏览看看. 1. 什么是类? 到底什么是类(class) ...

  8. Python中的封装,继承和多态

    面向对象的三大特性:封装,继承和多态 封装:在类的内部定义属性和方法,通过对象或类名来访问属性和方法,隐藏功能的实现细节,也可以设置访问权限. 广义的封装:实例化一个对象,给对象空间封装一些属性:狭义 ...

  9. python面向对象编程 -- 封装、继承

    面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...

随机推荐

  1. 【转】23 个安卓重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...

  2. Android adb临时关闭Selinux

    在eng/userdebug版本中 使用getenforce 命令查询当前权限状态,如:adb shell getenforce 使用setenforce 命令进行设置:adb shell seten ...

  3. React中跨域问题的完美解决方案

    针对react版本^16.6.0有多种解决方案 方案一:package.json中加上proxy代理配置 在packge.json加入 "proxy": "http:// ...

  4. Please enable using preview .net core sdks

    工具=>选项=>环境=>预览功能=>使用.net core sdk的预览

  5. matlab学习笔记10_5 通用字符串操作和比较函数

    一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张 ...

  6. orcad 删除不连接符号

    1. 双击不连接符号的引脚,如下面的1脚NC 2. 进入引脚的属性界面,取消Is No Connect

  7. java内存泄露/溢出等常见问题模拟及原因分析

    Java 8:从持久代到metaspace 系统稳定性--OutOfMemoryError 常见原因及解决方法 java各种异常问题示例(附pdf下载): java.lang.OutOfMemoryE ...

  8. k8s-RC副本机制

    一.libeness probe的三种检测机制 HTTP GET:对容器的IP(指定的端口和路径)执行HTTP GET请求,收到响应并返回状态码不代表错误(2xx/3xx),成功 TCP socket ...

  9. 自动化运维工具之SaltStack简介与安装

    1.SaltStack简介 官方网址:http://www.saltstack.com官方文档:http://docs.saltstack.comGitHub:https:github.com/sal ...

  10. Python MySQLdb 学习总结(转)

    转自http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html 感谢@糖拌咸鱼 任何应用都离不开数据,所以在学习python的时候,当然也 ...