• 面向对象练习题


    面向对象练习题

    1、实现单例模式

    姿势1,利用classmethod实现

    class Mysql:
    	__instance = None
    	def __init__(self, host="127.0.0.1", post=9999):
    		self.host = host
    		self.post = post
    		
    
    	@classmethod
    	def single(cls,):
    		if not cls.__instance:
    			cls.__instance = cls()
    		return cls.__instance
    
    
    
    sql1 = Mysql()
    sql2 = Mysql()
    print(sql1 is sql2)
    sql3 = Mysql.single()
    sql4 = Mysql.single()
    print(sql3 is sql4)
    

    姿势2,自定义元类

    class Mymeta(type):
    	__instance = None
    	# def __init__(self, *args, **kwargs):
    	# 	super().__init__(*args, **kwargs)
    	def __call__(self, *args, **kwargs):
    		if not self.__instance:
    			super().__call__(*args, **kwargs)
    		# print('__instance',self.__instance)
    		return self.__instance
    
    
    
    class Mysql(metaclass=Mymeta):
    	def __init__(self, host='127.0.0.1', post=9999):
    		self.host = host
    		self.post = post
    
    
    a = Mysql()
    b = Mysql()
    print(a is b )
    

    姿势3

    class Singleton:
    	__instance = None
    	def __new__(self, *args, **kwargs):
    		if not self.__instance:
    			super().__new__(self, *args, **kwargs) 
    
    
    p1 = Singleton()
    p2 = Singleton()
    print(p1 is p2)
    
    

    2、编写程序, 在元类中控制把自定义类的数据属性都变成大写

    class Mymeta(type):
    	def __new__(cls,name, bases, dics):
    		update_dic = {}
    		for k,v in dics.items():
    			if not callable(v) and not k.startswith("__"):
    				update_dic[k.upper()] = v
    			else:
    				update_dic[k] = v
    		return type.__new__(cls,name, bases, update_dic)
    
    
    class Chinese(metaclass=Mymeta):
    	country = "china"
    	sex = 'male'
    
    print(Chinese.__dict__)
    

    3、编写程序, 在元类中控制自定义的类无需init方法.

    class MyMeta(type):
    	def __call__(self, *args, **kwargs):
    		if args:
    			raise typeError("must be keyword argument")
    
    		obj = object.__new__(self)
    		for k, v in kwargs.items():
    			obj.__dict__[k]=v
    		return obj
    
    class Chinese(metaclass=MyMeta):
    	country = 'china'
    
    
    p1 = Chinese(name='alex', age=18)
    print(p1, p1.country)
    print(p1.__dict__)
    

    4、编写程序, 编写一个学生类, 要求有一个计数器的属性, 统计总共实例化了多少个学生.

    class Student:
    	i = 0
    	def __init__(self, name):
    		self.name = name
    		Student.i += 1
    		
    	
    	@classmethod
    	def count(cls):
    		
    		return cls.i
    		
    
    		
    
    a = Student("a")
    b = Student("b") 
    print(Student.count())
    
    

    5、编写程序, A 继承了 B, 俩个类都实现了 handle 方法, 在 A 中的 handle 方法中调用 B 的 handle 方法

    class B:
    	def handle(self):
    		print("B handle")
    
    
    class A(B):
    	def handle(self):
    		super(A, self).handle()
    		print("a handle")
    
    
    
    a = A()
    a.handle()
    
  • 相关阅读:
    weblogic无需用户名密码启动Server
    中文和unicode互转
    spring集成activeMQ
    jvm分析(MD语法)
    解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
    httpclient 支持代理和http & https
    容器配置jndi Tomcat为例
    java https tomcat 单双认证(含证书生成和代码实现) 原创转载请备注,谢谢O(∩_∩)O
    java Http原生 Get 和Post 支持代理认证
    解决客户端访问https报错
  • 原文地址:https://www.cnblogs.com/Jason-lin/p/8492217.html
Copyright © 2020-2023  润新知