一、类的定义
类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
 
对象:类实例化出来的叫做对象
 
对象和类的关系:类和对象的关系就像模具和铸件的关系,类的实例化的结果就是对象,而对对象的抽象就是类。
 
类和实例
面向对象最重要的概念就是类(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. spark streaming 流式计算---跨batch连接池共享(JVM共享连接池)

    在流式计算过程中,难免会连接第三方存储平台(redis,mysql...).在操作过程中,大部分情况是在foreachPartition/mapPartition算子中做连接操作.每一个分区只需要连接 ...

  2. jdk1.7 64位官方下载

    平时要新装一个系统环境,或者下载最新的jdk,就需要到oracle官网去下载一个jdk,而目前生产环境都是1.7的环境下开发完成的,需要下载1.7版本的jdk,oracle官方网站的默认下载页面是1. ...

  3. TeslaManage 运行日志

    “TeslaManage.exe”(Win32): 已加载“F:\TeslaManageProject\TeslaManage\x64\Debug\TeslaManage.exe”.已加载符号.“Te ...

  4. 将map对象参数转换成String=String&方式

    * 将map对象参数转换成String=String&方式 * @param params * @param charset * @return * @throws UnsupportedEn ...

  5. datatables:initComplete和drawCallback比较

    drawCallback: 对表的每个绘制事件执行操作非常有用 - 例如,您可能希望使用新显示的数据更新外部控件,或者启用服务器端处理,您可能希望将事件分配给新创建的元素.此回调旨在实现此目的,并将在 ...

  6. PS弧形边缘的去黑色背景色

    按照理论来说,纯色的字体加上纯色的背景,然后保存成png文件,然后用色彩范围选择纯色的背景,去掉背景,这样应该能得到原来设置的纯色的字体,但实际测试后不是这样的.如果是矩形等,是纯色,但是Photos ...

  7. 【C++面试】关于虚函数的常见问题

    1.虚函数的代价 1)带有虚函数的每个类会产生一个虚函数表,用来存储虚成员函数的指针 2)带有虚函数的每个类都会有一个指向虚函数表的指针 3)不再是内敛函数,因为内敛函数可以在编译阶段进行替代,而虚函 ...

  8. [转帖]Linux教程(14)- Linux中的查找和替换

    Linux教程(14)- Linux中的查找和替换 2018-08-22 07:03:58 钱婷婷 阅读数 46更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文为博主原 ...

  9. 【转帖】处理器史话 | 这张漫画告诉你,为什么双核CPU能打败四核CPU?

    处理器史话 | 这张漫画告诉你,为什么双核CPU能打败四核CPU? https://www.eefocus.com/mcu-dsp/371324 2016-10-28 10:28 作者:付丽华预计 9 ...

  10. 颜色转换、随机、16进制转换、HSV

    颜色转换.随机.16进制转换.HSV: /** * * *-----------------------------------------* * | *** 颜色转换.随机.16进制转换.HSV * ...