Python学习路程day7

多态

 1 class Animal:
 2     def __init__(self, name):    # Constructor of the class
 3         self.name = name
 4     def talk(self):              # Abstract method, defined by convention only
 5         raise NotImplementedError("Subclass must implement abstract method")
 6
 7 class Cat(Animal):
 8     def talk(self):
 9         return ‘Meow!‘
10
11 class Dog(Animal):
12     def talk(self):
13         return ‘Woof! Woof!‘
14
15 animals = [Cat(‘Missy‘),
16            Dog(‘Lassie‘)]
17
18 for animal in animals:
19     print animal.name + ‘: ‘ + animal.talk()

你要是觉得列表有点low,还可以定义成一个函数来写,比如:

 1 class Animal:
 2     def __init__(self, name):    # Constructor of the class
 3         self.name = name
 4     def talk(self):              # Abstract method, defined by convention only
 5         raise NotImplementedError("Subclass must implement abstract method")
 6
 7 class Cat(Animal):
 8     def talk(self):
 9         return ‘Meow!‘
10
11 class Dog(Animal):
12     def talk(self):
13         return ‘Woof! Woof!‘
14
15 def animal(obj):
16     print (obj.talk())
17
18 c= Cat("wuweizhen")
19 animal(c)

类的成员

类的成员可以分为三大类:字段、方法和属性

一、字段

简单的说就是类变量和实例变量

class Province:

    # 类变量
    country = ‘中国‘

    def __init__(self, name):

        # 实例变量
        self.name = name

# 直接访问实例变量
obj = Province(‘河北省‘)
print obj.name

# 直接访问类变量
Province.country

字段的定义和使用

应用场景: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用类变量

二、方法

方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

  • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
  • 类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls
  • 静态方法:由调用;无默认参数;

 1 class Foo:
 2
 3     def __init__(self, name):
 4         self.name = name
 5
 6     def ord_func(self):
 7         """ 定义普通方法,至少有一个self参数 """
 8
 9         # print self.name
10         print ‘普通方法‘
11
12     @classmethod
13     def class_func(cls):
14         """ 定义类方法,至少有一个cls参数 """
15
16         print ‘类方法‘
17
18     @staticmethod
19     def static_func():
20         """ 定义静态方法 ,无默认参数"""
21
22         print ‘静态方法‘
23
24
25 # 调用普通方法
26 f = Foo()
27 f.ord_func()
28
29 # 调用类方法
30 Foo.class_func()
31
32 # 调用静态方法
33 Foo.static_func()
34
35 方法的定义和使用

 1 class Animal:
 2     def __init__(self,name):
 3         self.name = name
 4     hobbie = ‘meat‘
 5     @classmethod     #类方法,不能访问实例变量
 6     def talk(self):
 7         print ("%s is talking..." % self.hobbie)
 8     @staticmethod    #静态方法,类变量和实例变量都不能访问
 9     def walk():
10         print("wu is walking...")
11     @property        #加了proeperty就不再是方法,会变成一个属性
12     def habit(self):
13         print("%s habit is xxoo" % self.name)
14
15 d = Animal("wuweizhen")
16 d.talk()
17 d.walk()
18 d.habit

相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。

不同点:方法调用者不同、调用方法时自动传入的参数不同。

三、属性 

时间: 2024-10-25 00:07:28

Python学习路程day7的相关文章

Python学习路程day16

Python之路,Day14 - It's time for Django 本节内容 Django流程介绍 Django url Django view Django models Django template Django form Django admin Django流程介绍 Django URL Example Here’s a sample URLconf: from django.conf.urls import url from . import views urlpattern

Python学习路程day11

SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果 Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: 1 MySQL-Python 2 mysql+mysqldb://<user>:<password>@<host>[:<por

python 学习 [day7]面向对象

编程模式概念 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向对象的三大特性 一.封装 第一步:将内容封装到某处 class Teacher: #定义了一个Teacher对象 #__init__ 构造方法,在创建对象时会自动执行类中的构造方法 def __init__(self, favor, name, age): #self类中的所有方法必须包含self参数,sel

python学习笔记-Day7(configparser模块、shutil、压缩与解压模块、subprocess)

configparser模块 # configparser用于处理特定格式的文件,其本质上是利用open来操作文件 # 下边我们就创建这种特定格式配置文件,来操作以下这里模块方法 --------------test.conf---------------- [section1] # configparser 会认定以中括号括住的为一个节点(node) k1 = 111 # 节点下,每一行配置文件为键值对存在(也可以写成 k2:123) k2 = v2 k3 = 123 k4 = True k1

Python学习笔记day7

面向对象(类)二 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 类的多继承实例: class A: def f2(self): print('f2 from A') class B(A): def f1(self): print('f2 from B') class C(A):

Python学习路程day10

Twsited异步网络框架 Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等. 事件驱动 简而言之,事件驱动分为二个部分:第一,注册事件:第二,触发事件. 自定义事件驱动框架,命名为:“弑君者”: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 # event_drive.py 5 6 event_list = [] 7 8 9 def run(): 10 for even

Python学习路程day15

Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("

PYTHON学习笔记-DAY-7

面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 1.1 静态方法,类方法,属性方法 # Author AlleyYu # 静态方法 # 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与

Python学习路程day19

Python之路,Day19 - Django 进阶 本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproject.com/en/1.9/topics/pagination/ 自定义template tags https://docs.djangoproject.com/es/1.9/howto/custom-template-tags/ 权限管理 django 自带有基本的权限管理 ,但粒度和限制权限的维度