python基础学习18----面向对象简述
2021-06-19 08:04
标签:关系 als 类方法 概念 不同 使用 通过 png 重写 这里就不再讲面向对象的相关概念知识或者与面向过程的比较了,直接进入类的学习 1.类的创建 2.封装 3.继承 子类可以对父类的方法进行重写,子类调用父类的方法使用super(子类名,self),self永远是执行该方法的调用者 python支持多继承 多继承中子类调用父类方法的寻找方法是按照父类声明的顺序从左到右,从下到上查找,一直查找到最高级的父类,但是如果不同的父类继承于同一个父类, 那么这个相当于根的父类为最后再去查找 4.多态 python原生多态,不像java,c++那样必须在方法的形参处申明类型 5.静态字段与静态方法 sex="male"为静态字段,可以通过对象访问 也可以通过类访问 self.name=name self.age=age 为普通字段只能通过对象访问 静态方法可以通过对象访问 也可以通过类访问,声明静态方法的方式为@staticmethod 类方法也可以通过对象访问 也可以通过类访问,声明类方法的方式为@classmethod,类方法的参数为类 6.属性 属性定义的时候像方法,使用的时候像字段,使用@property声明,这样就可以使sfencs.func有对应的值 既然要伪装成字段,那么不仅仅是能够有对应的值,也应该能够为它赋值,将它删除等操作 @func.setter为设置赋值的方法,@func.deleter为删除设置的方法。 经过这些设置之后,看似func成立一个字段,有了相应的特点,但其实这些特点都是假的。这三种方式只是3中对应关系,只是使用时是模仿字段操作,但真实操作是由 自己规定的,del并不能真的删除,而只是按照你所写的方法做相应的动作。 除此之外属性还有一种设置方式 只是方式改变了,效果还一样,不多说了。 7.成员修饰符 这里就指将成员声明为私有的 def __init__(self,name,age): 当然也有私有方法 在继承当中,私有成员与方法是不能被子类继承的 8.特殊成员方法 __init__ 构造方法,这个不用过多解释 __del__ 析构方法,当对象在内存中被释放时,自动触发执行 __call__ 对象后面加括号,触发执行 __int__ 调用int(对象)时使用的方法 __str__ 那么在打印 对象 时,默认输出该方法的返回值 __add__ 两个对象相加执行该方法 __dict__ 查看类或对象中的所有成员 __getitem__、__setitem__、__delitem__ 用于索引操作,如字典。以上分别表示获取、设置、删除数据 __iter__ __module__ 和 __class__ 表示当前操作的对象在那个模块 9.类的另一种创建方式 这种方式可以看出,类也是一种对象,是type类型的对象 我们可以从下面这张图看出类的实际创建过程 10.反射 反射可以通过字符串的方式来找到对象中的变量或方法 反射有4个方法getattr() hasattr() setattr() delattr() python一切事物皆是对象,模块同样也支持反射来操作 11.单例模式 对象也叫实例,单例模式表示该类只有一个对象 python基础学习18----面向对象简述 标签:关系 als 类方法 概念 不同 使用 通过 png 重写 原文地址:https://www.cnblogs.com/sfencs-hcy/p/9689925.htmlclass people:
def __init__(self):#构造函数
pass
sfencs=people()#类的实例
class people:
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs",19)
print("%s is %d"%(sfencs.name,sfencs.age))
class father:
def __init__(self):
self.a = 1
self.b = 2
def me(self):
print("i am father")
print(self)#<__main__.son object at>
class son(father):
def __init__(self):
super().__init__()
super(son,self).me()#执行父类的me方法,但self是people
def me(self):
print("i am son")
people=son()
print(people.a)#1
people.me()#i am son
class father1:
def __init__(self):
self.a = 1
self.b = 2
def me(self):
print("i am father1")
class father2:
def __init__(self):
self.c = 3
self.d = 4
def me(self):
print("i am father2")
class son(father1,father2):
def __init__(self):
father1.__init__(self)
father2.__init__(self)
super(son,self).me()#i am father1
def me(self):
print("i am son")
people=son()
print(people.c)#3
people.me()#i am son
class people:
sex="male"
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs","19")
print(sfencs.name)
print(sfencs.sex)
print(people.sex)
class people:
sex="male"
def __init__(self,name,age):
self.name=name
self.age=age
@staticmethod
def func():
print("这是静态方法")
sfencs=people("sfencs","19")
sfencs.func()
people.func()
class people:
sex="male"
def __init__(self,name,age):
self.name=name
self.age=age
@classmethod
def func(cls):
print("这是类方法")
print(cls)#
class people:
def __init__(self,name,age):
self.name=name
self.age=age
@property
def func(self):
return 1
sfencs=people("sfencs","19")
print(sfencs.func)#1
class people:
def __init__(self,name,age):
self.name=name
self.age=age
@property
def func(self):
return 1
@func.setter
def func(self,val):
print(val)
@func.deleter
def func(self):
print("del")
sfencs=people("sfencs","19")
print(sfencs.func)#1
sfencs.func=123
del sfencs.func
class people:
def __init__(self,name,age):
self.name=name
self.age=age
def f1(self):
return 1
def f2(self,val):
print(val)
def f3(self):
print("del")
func=property(fget=f1,fset=f2,fdel=f3,doc="描述")
sfencs=people("sfencs","19")
print(sfencs.func)#1
sfencs.func=123
del sfencs.func
class people:
self.name=name
self.__age=age
def getage(self):
return self.__age
sfencs=people("sfencs","19")
#print(sfencs.__age)私有成员不能直接通过对象来拿
print(sfencs.getage())#19class people:
def __init__(self,name,age):
self.name=name
self.__age=age
def getage(self):
return self.__age
def __fun(self):
print("这是私有方法")
def func(self):
self.__fun()
sfencs=people("sfencs","19")
#print(sfencs.__age)私有成员不能直接通过对象来拿
print(sfencs.getage())
#sfencs.__fun()
sfencs.func()
def __del__(self):
pass
class people:
def __init__(self,name,age):
self.name=name
self.__age=age
def __call__(self,a,b):
print("__call__")
print(a,b)
sfencs=people("sfencs",19)
sfencs(1,2)
class people:
def __init__(self,name,age):
self.name=name
self.__age=age
def __int__(self):
return 10
sfencs=people("sfencs",19)
data=int(sfencs)
print(data)#10
class people:
def __init__(self,name,age):
self.name=name
self.__age=age
def __str__(self):
return "hello world"
sfencs=people("sfencs",19)
print(sfencs)#hello world
class people:
def __init__(self,name,age):
self.name=name
self.age=age
def __add__(self,other):
return self.age+other.age
sfencs=people("sfencs",19)
Tom=people("Tom",20)
print(sfencs+Tom)#39
class people:
sex="male"
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs",19)
print(sfencs.__dict__)#{‘name‘: ‘sfencs‘, ‘age‘: 19}
print(people.__dict__)
#{‘__module__‘: ‘__main__‘, ‘sex‘: ‘male‘, ‘__init__‘:
class people:
def __init__(self,name,age):
self.name=name
self.age=age
def __getitem__(self, key):
print(‘__getitem__‘, key)
return 2
def __setitem__(self, key, value):
print(‘__setitem__‘, key, value)
def __delitem__(self, key):
print(‘__delitem__‘, key)
sfencs=people("sfencs",19)
sfencs["one"]=1#__setitem__ one 1
print(sfencs["one"])#__getitem__ one 2
del sfencs["one"]#__delitem__ one
class people:
def __init__(self,list):
self.list=list
def __iter__(self):
return iter(self.list)
sfencs=people([1,2,3,4,5])
for i in sfencs:
print(i)
class people:
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs",19)
print(sfencs.__module__)#__main__
print(sfencs.__class__)#
def f(self):
print(self.name,self.age)
def __init__(self,name,age):
self.name = name
self.age = age
people = type(‘people‘,(object,),{‘func‘:f, ‘__init__‘:__init__})
sfencs=people("sfencs",19)
sfencs.func()
class people:
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs",19)
data1=getattr(sfencs,"name")
print(data1)#sfencs
data2=hasattr(sfencs,"age")
print(data2)#True
setattr(sfencs,"age",20)
print(sfencs.age)#20
delattr(sfencs,"age")
data3=hasattr(sfencs,"age")
print(data3)#False
class ConnectPool:
__instatnce=None
@staticmethod
def get_instance():
if ConnectPool.__instatnce:
return ConnectPool.__instatnce
else:
ConnectPool.__instatnce = ConnectPool()
return ConnectPool.__instatnce
obj =ConnectPool.get_instance()
print(obj)#<__main__.connectpool object at>
obj1 =ConnectPool.get_instance()
print(obj1)#<__main__.connectpool object at>
print(obj1==obj)#True
下一篇:Python 单例模式