zoukankan      html  css  js  c++  java
  • python 基础 12 初识类,类方法,类属性

    python 基础 12 初识类,类方法,类属性

    
    # 面向过程 : 想要一个结果 写代码 实现计算结果
    # 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的
    
    # 复杂的 拥有开放式结局的程序 比较适合使用面向对象开发
        # 游戏
        # 购物
    
    # 类和对象之间的关系?
        # 类 是一个大范围 是一个模子 它约束了事物有哪些属性 但是不能约束具体的值
        # 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上具体的值
    
    # 定义一个 ‘人’ 类
    # class Person:
    # 	"""人"""
    #   #__init__ 函数创建了人的一些个属性,名字啥的,这个叫动态属性变量
    # 	def __init__(self, name,sex,job,hp,weapon,ad):
    # 		super(Person, self).__init__()
    # 		self.name = name
    # 		self.sex = sex
    # 		self.job = job
    # 		self.hp = hp
    # 		self.weapon = weapon
    # 		self.ad = ad
    		#人可以执行很多功能,比如打狗,
    # 	def cuo(self,dog):
    # 		dog.hp -= self.ad
    # 		print(f'{self.name}给{dog.name}搓了澡,{dog.name}掉了{self.ad}点血,{dog.name}的当前血量为{dog.hp}')
    
    # 定义一个 狗 类
    # class Dog:
    # 	def __init__(self, name,hp,ad,style):
    # 		super(Dog, self).__init__()
    # 		self.name = name
    # 		self.hp = hp
    # 		self.ad = ad
    # 		self.style = style
    # 	def 舔(self,person):
    # 		person.hp -= self.ad
    # 		print('{}舔了{}一口,{}掉了{}血,{}当前血量为{}.'.format(self.name,person.name,person.name,self.ad,person.name,person.hp))
    
    # alex = Person('alex','male','搓澡工',260,'搓澡巾',1)
    # print('alex : ',alex) #alex :  <__main__.Person object at 0x0033B058> 一个类对象
    
    # 小白 = Dog('小白',5000,249,'柴狗')
    # print('小白: ',小白)
    
    # alex.cuo(小白)
    # 小白.舔(alex)
    
    # print(小白.__dict__) #{'name': '小白', 'hp': 4999, 'ad': 249, 'style': '柴狗'} 打印出全部属性
    # print(alex.__dict__) #{'name': 'alex', 'sex': 'male', 'job': '搓澡工', 'hp': 11, 'weapon': '搓澡巾', 'ad': 1}
    
    # # 定义一个圆形类,半径是这个圆形的属性,实例化一个半径为5的圆形,一个半径为10的圆形
    #     # 完成方法
    #     # 计算圆形面积
    #     # 计算圆形周长
    # import math
    # class Circle(object):
    # 	"""docstring for Circle"""
    # 	def __init__(self, r):
    # 		super(Circle, self).__init__()
    # 		self.r = r
    	
    # 	def circumferrence(self):
    # 		print('圆的周长为{}'.format(2*self.r*math.pi))
    	
    # 	def measure(self):
    # 		print('圆的面积为{}'.format(self.r*self.r*math.pi))
    
    # c1 = Circle(5)
    # c1.circumferrence()
    # c1.measure()
    
    
    
    # # 定义一个用户类,用户名和密码是这个类的属性,实例化两个用户,分别有不同的用户名和密码
    # 	# 设计一个方法 修改密码
    # 	# 你得先登录才能修改密码
    
    import time
    import os
    
    def auth(f):
    	def inner(*args,**kwargs):
    		if login():
    			ret = f(*args,**kwargs)
    			return ret
    	return inner
    
    def login():
    	username = input("username:").strip()
    	password = input("password:").strip()
    	with open('userinfo',encoding='utf-8') as f1:
    		for i in f1:
    			uid,pwd = i.strip().split('|')
    			if username==uid and password==pwd:
    				print('login successfully')
    				return True
    		else:
    			print('login failed')
    			return False
    
    	   
    
    class User(object):
    	"""docstring for user"""
    	def __init__(self, username,password):
    		super(User, self).__init__()
    		self.username = username
    		self.password = password
    
    	@auth
    	def fix_pass(self):
    		oldpwd = input('please input your old password:') 
    		if oldpwd == self.password:
    			newpwd = input('please input your new password:')
    			with open('userinfo',encoding='utf-8',mode='r') as f2,open('userinfo.bak',encoding='utf-8',mode='w') as f3:
    				for line in f2:
    					uid,pwd = line.strip().split('|')
    					if uid == self.username:
    						self.password = newpwd.strip()
    						pwd = newpwd.strip()
    						f3.write("{}|{}
    ".format(uid,pwd))
    					else:
    						f3.write('{}
    '.format(line))
    			os.remove('userinfo')
    			os.rename('userinfo.bak','userinfo')
    			return True
    		else:
    			return False
    
    		
    
    		
    fallen = User('fallen','123456')
    
    #print(fallen.__dict__)
    fallen.fix_pass()
    
    # 算法
    # 二分查找  [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69] - 有序列表
    # 不用in index 从列表中找到一个值的位置
    # 实现上面的功能 - 用代码
    
    lst1 = [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69]
    
    ## 这个不对,两头相加除以2求中间的值的方法不对
    #def search(num,lst,left ,right):
    	
    # 	if right>left:
    # 		mid = int((left+right)/2)
    # 		if lst[mid]==num:
    # 			return mid
    # 		elif lst[mid] > num:
    # 			right=mid
    # 			search(num,lst,left,right)
    # 		elif lst[mid] < num:
    # 			left=mid
    # 			search(num,lst,left,right)
    # 	else:
    # 		return -1
    
    
    	
    print(lst1.index(58))
    print('index',search(58,lst1,0,len(lst1)-1))
    
    
    
    ## 菜鸟教程答案
    # 返回 x 在 arr 中的索引,如果不存在返回 -1
    def binarySearch (arr, l, r, x): 
      
        # 基本判断
        if r >= l: 
      
            mid = int(l + (r - l)/2)
      
            # 元素整好的中间位置
            if arr[mid] == x: 
                return mid 
              
            # 元素小于中间位置的元素,只需要再比较左边的元素
            elif arr[mid] > x: 
                return binarySearch(arr, l, mid-1, x) 
      
            # 元素大于中间位置的元素,只需要再比较右边的元素
            else: 
                return binarySearch(arr, mid+1, r, x) 
      
        else: 
            # 不存在
            return -1
      
    # 测试数组
    arr = [ 2, 3, 4, 10, 40 ] 
    x = 10
    print('index',search(10,arr,0,len(lst1)-1))
    # 函数调用
    result = binarySearch(arr, 0, len(arr)-1, x) 
      
    if result != -1: 
        print ("元素在数组中的索引为 %d" % result )
    else: 
        print ("元素不在数组中")
    

    类的其他属性

    一:我们定义的类的属性到底存到哪里了?有两种方式查看
    dir(类名):查出的是一个名字列表
    类名.__dict__:查出的是一个字典,key为属性名,value为属性值
    
    二:特殊的类属性
    类名.__name__# 类的名字(字符串)
    类名.__doc__# 类的文档字符串
    类名.__base__# 类的第一个父类(在讲继承时会讲)
    类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
    类名.__dict__# 类的字典属性
    类名.__module__# 类定义所在的模块
    类名.__class__# 实例对应的类(仅新式类中)
    
    
    
  • 相关阅读:
    【万里征程——Windows App开发】使用华丽丽的字体
    【万里征程——Windows App开发】SemanticZoom视图切换
    用Alt码打出Pi以及各式各样的符号
    3行代码列出硬盘上所有文件及文件夹
    【万里征程——Windows App开发】ListView&GridView之分组
    【万里征程——Windows App开发】ListView&GridView之添加数据
    从头认识js-js中的对象
    js中如何判断属性是对象实例中的属性还是原型中的属性
    从头认识js-HTML中使用JavaScript
    从头认识js-js的发展历史
  • 原文地址:https://www.cnblogs.com/fallen043/p/12815333.html
Copyright © 2011-2022 走看看