Python面向对象(三)
一.绑定方法与非绑定方法
一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的
2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethod
二.非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,普通函数没有自动传值的效果
案例如下:
class Foo:
def f1(self):
print(self) @classmethod
def f2(cls):
print(cls) @staticmethod
def f3(a, b):
print('f3', a * b)
import settings
class Mysql:
def __init__(self,ip,port):
self.ip = ip
self.port = port
self.id = self.create_id() def tell_info(self):
print('ip:%s port:%s id:%s'%(self.ip,self.port,self.id)) @classmethod
def from_conf(cls):
return cls(settings.IP,settings.PORT) @staticmethod
def create_id():
import uuid
return uuid.uuid4() obj1 = Mysql.from_conf()
obj2 = Mysql('10.1.183.16',8080)
obj1.tell_info()
obj2.tell_info()
小案例
二.isinstance与issubclass
isinstance(obj,cls)检查obj是否是类cls的对象
class Foo:
pass obj = Foo()
# 类型判断
print(isinstance(obj,Foo))
issubclass(sub,super)检查sub类是否是super类的子类
class Foo:
pass
class Bar(Foo):
pass
obj = Foo() # 判断是否子类
print(issubclass(Foo,Bar))
三.反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切事物都是对象,用字符串取代点(.)对属性的操作
hasattr(o,name)判断某一个属性是是否存在
setattr(obj,name,value)给对象一个属性,属性名给name,值为value
getattr(o,name,default)获得对象name属性的值,不声明default时不存在该属性会报错
delattr(o,name)删除对象的name属性
class Person:
def __init__(self,name,age):
self.name = name
self.age = age def run(self):
print('%s run'%self.name) obj = Person('Yven',18)
delattr()
print(hasattr(obj,'name'))#'name' in obj.__dict__
print(getattr(obj,'name',None))#obj.__dict__['name']
setattr(obj,'sex','male')#obj.__dict__['sex'] = 'male'
print(obj.sex)
delattr(obj,'sex')
print(obj.__dict__)
setattr(obj,'address','shanghaipudong')
print(obj.address)
print(hasattr(obj,'address'))
delattr(obj,'address')
print(hasattr(obj,'address'))
Python面向对象(三)的更多相关文章
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Python面向对象三要素-封装(Encapsulation)
Python面向对象三要素-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述 将数据和操作组织到类中,即属性和方法 将数据隐藏起来,给 ...
- Python面向对象三要素-多态
Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...
- Python 面向对象三(转载)
来源:Mr.Seven www.cnblogs.com/wupeiqi/p/4766801.html 四.类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三 ...
- python 面向对象三 访问权限 下划线 双下划线
一.双下划线 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问. ...
- python 面向对象(三)类与类之间的关系 初始化方法一些类
###################总结################# 面试的时候 让写python一些特殊方法 __init__ 创建对象的时候初始化 __new__对象实例化调用第一个方法 ...
- python 面向对象(三)--继承和多态
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Supe ...
- Python 面向对象(三) 魔术方法
__getitem__ 在对实例或对象使用索引访问时调用,self[key]__dir__ 收集当前模块的信息,包括继承自其它基类(包括object类)的属性和方法 __new 定义如何创建实例__i ...
- python面向对象<三>
类属性.实例属性: class Tool(object): #属性(类属性)类对象(Tool) num = 0 #方法 def __init__(self,new_name): self.name = ...
随机推荐
- 智能合约安全事故回顾(2)-BEC溢出攻击
讲溢出攻击之前,先给大家讲个故事:2014年的时候,美国的宾夕法尼亚州的某个小镇上发生了一个乌龙事件,征兵系统对一万多名1893年到1897出生的男子发去信函,要求他们注册参军,否则面临罚款和监禁.收 ...
- Vue.js 60分钟快速入门
原文链接:http://www.cnblogs.com/keepfool/p/5619070.html Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和 ...
- [ZJOI2009]函数 BZOJ1432
题目描述 有n 个连续函数fi (x),其中1 ≤ i ≤ n.对于任何两个函数fi (x) 和fj (x),(i != j),恰好存在一个x 使得fi (x) = fj (x),并且存在无穷多的x ...
- 禁止百度转码和百度快照缓存的META声明
今天手机 site 中国博客联盟时,发现网被转码了,虽然这个网站没做移动站,但是我也不希望被百度转码,因为这相当于拦截了所有来自手机的流量.下面说一下禁止百度转码和禁止百度快照缓存的方法. 一.禁止百 ...
- netty结合websocket使用
首先需要在后台建立netty服务器启动类; package com.cxy; import io.netty.bootstrap.ServerBootstrap; import io.netty.ch ...
- json几种读取方式,ArrayList循环读取【转】
在之前写过提取json数据格式的文章,这次对jmeter读取json数据格式进行整理. 举例一个接口的response 格式如下: { "data" : { "devic ...
- CF E. Vasya and a Tree】 dfs+树状数组(给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值)
题意: 给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值 ...
- js中url有中文的转码方法
转载:https://www.cnblogs.com/chiangfai/p/6073000.html
- jdk collections map类图
- 9 Strings
1 Strings 1.1 Strings and GStrings Groovy允许你使用2种不同类型的字符串类型,分别是java.lang.String和groovy.lang.GS ...