建设项目公示对网站有什么要求,手机视频制作软件排名,租房网站开发,vs2008怎么做网站第四章 面向对象 1. 基本格式 定义#xff1a;当函数(业务功能)比较多#xff0c;可以使用面向对象来进行归类#xff0c;如果有一个凡事使用的公共值#xff0c;也可以放到对象中 #格式关键字
class 类名:def __inti__(self,x)self.x xdef 方法名(self,name):print(…第四章 面向对象 1. 基本格式 定义当函数(业务功能)比较多可以使用面向对象来进行归类如果有一个凡事使用的公共值也可以放到对象中 #格式关键字
class 类名:def __inti__(self,x)self.x xdef 方法名(self,name):print(self.name)
v1 类(666)
v1.方法(Parallel)#存储一些值方便之后使用
clas Foo:def __intit__(self,n,a,g):self.name nself.age aself.gender gdef show(self):temp 我是%s年龄%s性别%s%(self.name,self.age,self.gender,)print(temp)
p Person(Parallrl,18,男) #类()实例化对象自动执行此类中的__init__方法
p.show() 2. 三大特性 2.1 封装 定义将同一类的函数或重复使用的公共值封装佛奥同一个类中方便以后使用 2.2 继承 定义创建一个子类的对象执行对象.方法时优先在自己的类中找如果没有就在父类中找多个类中如果有公共的方法可以放在基类中 注继承关系的查找顺序要注意self到底是哪个类创建的就从此类开始找 #继承
class Base: 父类(基类)def f1(self):pass
class Foo(Base): 子类(派生类)def f2(self):pass
obj Foo() 3. 类成员 方法(绑定方法/普通方法)至少有一个self参数先创建对象由对象.方法()执行 类方法classmethod至少有一个参数cls类.类方法()执行 静态方法staticmethod参数无限制可以不传参可以不创建对象类.静态方法名()执行 类变量写在类的下一级和方法同级类/对象.类变量名称调用 属性property把方法编程属性出去了self不能有其他参数用对象.属性名调用不需要加() 4. 成员修饰符 定义公有私有 #公有变量和私有变量
class Foo:def __init__(self,name):self.name name #公共的self._name name #私有的def func(self):print(self,name)
obj Foo(alex)
print(obj.name)
print(obj.__name) #外部访问不到#访问私有变量
class Foo:def __init__(self,name):self.__x name
obj Foo(alex)
print(obj._Foo__x) #强制访问私有实例变量 5. 特殊成员 #__init__初始化方法用于给对象赋值(默认执行)#__new__构造空对象比__inti__优先执行#__call__可以用类()()直接执行call方法#__getitem__/__setitem__/__delitem__
class Foo:def __setitem__(self,key,value):print(key,value)def __getitem__(self,item):print(item)###xxxdef __delitem__(self,key):print(key)###ttt
obj1 Foo()
obj1[k1] 123#内部会自动调用__setitem__方法
val obj1[xxx] #内部会自动调用__getitem__方法
print(val)
del obj1[ttt]#内部会自动调用__delitem__方法#__str__打印一个对象当__str__返回什么对象就打印什么
class Foo(object):def __str__(self):return sdsdsa
obj Foo()
print(obj) #打印的是对象类型也是对象但答应出来的是sdsdsa#__dict__将要找的元素编程字典格式
class Foo(object):def __init__(self,name,age,email):self.name nameswf.age ageself.email email
obj Foo(alex,19,xxxqq.com)
val obj.__dice__#去对象中找到所有变量转换为字典
print(val) #{name:alex,age:19}#__enter__/__exit__文件上下文管理
class Foo(object):def __enter__(self):self.x open(a.txt,modea,encodingutf-8)return self.xdef __exit__(self,exc_type,exc_val,exc_tb):self.x.close()
with Foo() as ff:ff.write(alex)#对象互相加减乘除
class Foo(object):def __add__(self,other):pass
obj1 Foo()
obj2 Foo()
val obj1 obj2###触发add前面触发前面为self后面为other 6. 嵌套 定义面向对象可以当参数嵌套到函数中类(Foo)可以为key对象(obj)可以做key class Dream(object):def __init__(self,title,addr):self.title titleself.address addrclass House(object):def __init__(self,name,dream_object):self.name nameself.dream dream_objects1 Dream(北京,沙河)
s2 Dream(上海,浦东)
s3 Dream(深圳,南山)c1 House(Parallel,s1)
c1.name
c1.dream.title
c1.dream.address 7. 反射 #根据字符串的形式去某个对象中操作他的成员
class Foo:def login(self):pass
obj Foo()
func_name input(请输入方法名:)
getattr(obj,func_name)() #找到方法并执行#根据字符串的形式去某个对象中判断是否有该成员
class View(object):def login(self):return 登陆def logout(self):return 登出def index(self):return 首页
obj View()
func_name input(请输入方法名:)
if not hasattr(obj,func_name):print(输入错误)
getattr(obj,func_name)()#根据字符串的形式去某个对象中设置成员
class Foo:pass
obj Foo()
setattr(obj,k1,123) #obj.k1 123 #设置对象成员
print(obj.k1)#根据字符串的形式去某个对象中删除成员
class Foo:k1 999
obj Foo()
delattr(obj,k1) 8. 内置函数 issubclass判断某个类是否是某个类的子类 print(issubclass(子类,父类)) 返回布尔值 isinstance判断对象是否是某个类或该类基类的实例 print(isinstance(obj,Foo)) 判断obj是否是Foo或Foo基类的实例 返回布尔值 super根据self对象所属类的继承关系按顺序挨个找并执行默认找到第一个就不找了 v super().xx() 9. 单例模式 定义无论实例化多少次都是用第一次创建的那个对象 class Foo(Object):instance Nonedef __new__(cls,*args,**kwargs):if not instance:cls.instance object.supper().__new__(cls)return cls.instance
obj1 Foo()
obj2 Foo() #不管启动多少个Foo内存地址都指向obj1 转载于:https://www.cnblogs.com/parallel-Y/p/10921670.html