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 = ...
随机推荐
- loj#6485. LJJ 学二项式定理(单位根反演)
题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...
- 一些优秀的Firefox扩展
AdBlock Plus 拦截广告. 在对付CSDN等垃圾网站时非常有用. Block Site 拦截你不想看的网站 没有知乎的一天真好... XStyle 设置自己喜欢的CSS样式(表示自己并不会用 ...
- Codeforces Round #533 (Div. 2) 部分题解A~D
A. Salem and Sticks 题目描述 Salem gave you n n n sticks with integer positive lengths a1,a2,…,an a_1, a ...
- [ZJOI2018]历史(LCT)
这篇还发了洛谷题解 [Luogu4338] [BZOJ5212] 题解 题意 给出一棵树,给定每一个点的 \(access\) 次数,计算轻重链切换次数的最大值,带修改. 先考虑不带修改怎么做 假设 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_运行时解析类型引用
public sealed class Program{ public static void Main() { System.Console.WriteLine("Hi"); } ...
- BZOJ 4373 算术天才⑨与等差数列 线段树+set(恶心死我了)
mdzz,这道题重构了4遍,花了一个晚上... 满足等差数列的条件: 1. 假设min是区间最小值,max是区间最大值,那么 max-min+k(r−l) 2. 区间相邻两个数之差的绝对值的gcd=k ...
- webAPI过滤器添加参数签名
项目需求: 接口对安卓和IOS开发接口,需要房子用户窜改数据请求接口.添加sign签名校验参数. 代码如下:加上特性标签就可以控制部分接口验证 public class SignAuthorizeFi ...
- window.open()总结
今天找父页面和子页面调去问题. 父页面js 1.打开子页面 可以设置子页面长宽高和位置 win= window.open(url, "", "top=45,left=20 ...
- my08_mysqldump+binlog server备份
备份策略描述 ******************************************* mysqldump备份适用于小数据量的备份,比如100G以下的数据量,就可以使用逻辑备份 举例两个 ...
- Zero Sum Subarray
Given an integer array, find a subarray where the sum of numbers is zero. Your code should return th ...