python3 多态,绑定方法与非绑定方法

多态:同一种事物的不同形态(一个抽象类有多个子类,因而多态的概念依赖于继承)

1. 序列类型有多种形态:字符串,列表,元组。

2. 动物有多种形态:人,狗,猪

多态性:多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同功能的函数。

多态性的例子:obj具有多态性

# 以下例子可以概括:多态性就是一个接口(函数func()),多种实现(f.func())import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def talk(self):
        pass
class People(Animal):
    def talk(self):
        print(‘say hello‘)
class Pig(Animal):
    def talk(self):
        print(‘哼哼哼‘)
class Dog(Animal):
    def talk(self):
        print(‘汪汪汪‘)
p1=People()
p2=Pig()
p3=Dog()

def talk(obj):  # 不同的实例化对象obj调用talk()函数,结果不同
    obj.talk()

talk(p1)
talk(p2)
talk(p2)
绑定方法:绑定给谁就是给谁用的

绑定到对象的方法:定义:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象的,给谁用:给对象用特点:obj.bar() 自动把obj当做第一个参数传入,因为bar中的逻辑就是要处理obj

绑定到的方法:定义:在类中定义的,被classmethod装饰的函数就是绑定到类的方法给谁用:给类用特点:类.class_method() 自动把类当做第一个参数传入,因为class_method中的逻辑就是要处理类
class People:
    def __init__(self,name):
        self.name = name
    def bar(self):
        print(‘---‘,self.name)

    @classmethod
    def func(cls):
        print(cls)

f = People(‘egon‘)
print(People.func)  # 绑定给类
print(f.bar)    #绑定给对象的

People.func()

非绑定方法:用staticmethod装饰器装饰的方法

非绑定方法,就是一个函数,就是一个工具而已,不需要类,也不需对象

import hashlib
import time
class MySQL:
    def __init__(self,host,port):
        self.id=self.create_id()
        self.host=host
        self.port=port
    @staticmethod
    def create_id(): #就是一个普通工具
        m=hashlib.md5(str(time.clock()).encode(‘utf-8‘))
        return m.hexdigest()

print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看结果为普通函数
conn=MySQL(‘127.0.0.1‘,3306)
print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看结果为普通函数
时间: 2024-11-06 19:46:25

python3 多态,绑定方法与非绑定方法的相关文章

Mixins、多态、绑定方法与非绑定方法

一.Mixins机制 是一种命名规范,解决多继承中一个对象同时属于多个类的问题,Mixins机制的核心是在多继承背景下尽可能的提升代码的可读性,符合人类的思维:什么是什么. 拿交通工具来说,民航飞机.直升飞机.汽车都是属于交通工具.可以定义一个交通工具的父类,三者都可以继承这个父类,他们都有载客的功能.除了载客,飞机还能起飞.上天!!!,而汽车不行.显然民航飞机和直升机的飞行这个属性只是这两个交通工具的所特有的功能而已,在继承交通工具父类的同时可以用Mixins机制混入飞行这个功能,注意混入的只

python基础之多态与多态性、绑定方法和非绑定方法

多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类型有字符串.列表.元组,文件的类型分为普通文件和可执行文件,人类又有多种形态,男女老少..等等例子 1 import abc 2 class Animal(metaclass=abc.ABCMeta): #模拟动物类 3 @abc.abstractmethod 4 def talk(self): 5

面向对象:多态(多态性)、封装(隐藏属性)、绑定方法与非绑定方法

多态: 多态指的是一类事物有多种形态:比如 动物有多种形态:人.狗.猪 如下代码: import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(se

property,多态,绑定方法与非绑定方法

1.property property本质就是一个python为你准备好了的--装饰器,那既然他是装饰器,也就意味着他的用法就是我们熟悉的装饰器语法糖用法@+名字,而它的作用就是将装饰的函数(类中定义的方法)伪装成一种属性(类中有两种特质,一是属性你也可以理解为不变的量,二是方法也就是多态变化的函数),那property具体是怎么做到这点呢?先来思考一个问题. 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9 过重:24-27 肥胖:28-32 非常肥胖, 高于32 体质指数(B

Python3.7之绑定方法与非绑定方法

Python3.7之绑定方法与非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) ''' 输出结果: <bou

Python学习——02-Python基础——【8-面向对象的程序设计】——封装、绑定方法与非绑定方

十 封装 1引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,还有alex一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 2先看如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) #其实这仅仅这是一种变形操作且仅仅只在类定义阶段发生变形 #类中所有双下划线开头的名称如__x都会在类定义时自动变形成:_类名__x的形式: class A: __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据

python_day7 绑定方法与非绑定方法

在类中定义函数如果 不加装饰器 则默认 为对象作为绑定方法 如果增加 classmethod 是 以 类 作为绑定方法 增加 classmethod 是 非绑定方法,就是不将函数 绑定 ##################### class Foo: def func(self): print(self) @classmethod def func2(cls): print(cls) @staticmethod def sta(): print('非绑定参数') JG=Foo()JG.func(

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

类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) 输出结果: <bound m

三 面向对象之绑定方法与非绑定方法

一 绑定方法 二 非绑定方法 三 classmethod和staticmethod的区别 一 绑定方法 绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法.                 为类量身定制                 类.boud_method(),自动将类当作第一个参数传入               (其实对象也可调用,但仍将类当作第一个参数传入) 2. 绑定到对象的方法:没有被任何装饰器装饰的方

绑定方法和非绑定方法

一:绑定方法 绑定方法有两种,一种是与对象绑定,在类中定义的方法都是都是默认与对象绑定的,另一种是绑定到类的方法,要加上classmethod装饰器: class People: def __init__(self, name, age): self.name = name self.age = age def get_name(self): print("我的名字是:{}".format(self.name)) @classmethod def say_hello(cls): pri