python-day11
一、类 方法: 1、普通方法: 定义格式: class Bank_money: def __init__(self,card): self.card = card self.money = 0 def cun_kuan(self,money): self.money += money print(‘{}存款成功,余额为:{}‘.format(self.card,self.money)) self.show() def qu_kuan(self,money): if money<self.money: self.money -= money print(‘{}取款成功,余额为:{}‘.format(self.card,self.money)) self.show() else: print(‘余额不足!!!‘) def show(self): print(‘卡号:{} 余额:{}‘.format(self.card,self.money)) a = Bank_money(‘001‘) a.cun_kuan(20000) card2 = Bank_money(‘002‘) card2.cun_kuan(20000) card2.qu_kuan(10000) 2、类方法 类方法: class Utils: # 类属性 version = ‘1.0‘ # 对象属性 def __init__(self): self.id = ‘001‘ # 类方法 @classmethod def conn_db(cls): # cls就是类对象本身 print(‘加载数据库的驱动程序,当前版本号是‘,cls.version) print(‘数据库建立连接成功!!‘) # cls.select_add() @staticmethod def select_add(): # 参数:不依赖对象self,也不依赖类cls print(‘查询数据库的数据,当前版本号为:‘,Utils.version) Utils.conn_db() def add(self): print(‘添加成功!!!‘) # Utils.conn_db() # 类方法能否被对象调用? 能访问 # u = Utils() # u.conn_db() # 对象调用conn_db(cls) ----cls 任然是类对象本身 # 类方法中能否访问对象属性? # 不能 # 静态方法的调用: Utils.select_add() # 静态方法能否被对象方法? 能访问 # u = Utils() # u.select_add() # 类方法能否调用静态方法? 静态方法能否调用类方法? print(‘-------------------------‘) Utils.conn_db() # 类方法,静态方法中能调用普通方法? 不能 3、魔术方法 魔术方法就是一种类的特殊方法,普通方法需要调用,魔术方法由系统自己调用。 class Person(object): def __init__(self): print(‘------->init‘) def __new__(cls,*args,**kwargs): print(‘------->new‘) return object.__new__(cls) def __del__(self): p = Person() print(p) __str__ 魔术方法 class Person(object): def __init__(self,name,age): self.name = name self.age = age def __str__(self): return self.name+‘t‘+str(self.age) def __repr__(self): return ‘helloworld‘ def __call__(self,**kwargs): print(‘我被调用‘) def __len__(self): return 6 p = Person(‘gang‘,20) print(p) p() p1 = Person(‘lisi‘,60) print(p1) r = repr(p1) # 调用的时候自动触发 print(r) print(len(p1)) list1 = [1,4,5,6,7,9] print(len(list1)) 运算相关的魔术方法:
__gt__ > class Cat: def __init__(self,nickname,age): self.nickname = nickname self.age = age # def __gt__(self,other): # return self.age>other.age # def __lt__(self,other): # return self.age<other.age def __eq__(self,other): return self.age == other.age def __add__(self,other): return self.age+other.age def __int__(self): return self.age c1 = Cat(‘小虎‘,2) c2 = Cat(‘犊子‘,3) c3 = Cat(‘犊子2‘,3) # print(c1 > c2) # print(c1 < c2) print(c1 == c2) result = c1 +c2 +int(c3) print(result) 跟属性相关的魔术方法: class Person: def __init__(self,name): self.name = name def __getattr__(self,item): if item ==‘age‘: return 20 elif item ==‘gender‘: return ‘men‘ else: return ‘不存在此属性{}‘.format(item) # def __setattr__(self,key,value): # print(key,value) # 不能进行赋值的操作,会出现递归的错误 p = Person(‘gang‘) print(p.name) print(p.age) print(p.gender) p.name = ‘飞蛾扑火‘ print(p.name) 4、私有化:只能类自身中进行调用,对象外部无法访问 实现属性或者私有化要通过:__属性名()__,__方法名__() python中的私有化,底层对私有属性进行了改名操作:_类名__属性名 class Person: def __init__(self,name): self.name = name self.__age = 20 def show_age(self): print(‘年龄:‘,self.__age) def __test(self): print(‘测试私有的test方法‘) p = Person(‘jack‘) print(p.name) # print(p.__age) p.show_age() p._Person__test() ? ?5、封装 1、属性和方法----封装到类中 class Person: # 限制作用 __slots__ = [‘__name‘,‘__age‘,‘__flag‘] def __init__(self,age): self.__name = name self.__age = age self.__flag = True def get_name(self): if self.__flag: return self.__name else: return ‘没有权限查看用户名‘ def get_age(self): return self.__age def set_name(self,name): if len(name) >= 6: self.__name = name else: print(‘名字必须要大于等于6位‘) def set_age(self,age): if 125 > age > 0: self.__age = age else: print(‘没有这种人存在‘) p = Person(‘lucy‘,20) print(p.get_name()) p.set_name(‘steven‘) print(p.get_name()) p.set_name(‘tom‘) print(p.get_name()) p.set_age(120) print(p.get_age()) ? 6、@property 装饰器是用来装饰类中方法的 class Person: __slots__ = [‘__name‘,‘__flag‘,‘__password‘] def __init__(self,age): self.__name = name self.__password = ‘123‘ self.__age = age self.__flag = False @property def name(self): if self.__flag: return self.__name else: return ‘没有权限查看用户名‘ @name.setter def name(self,name): if len(name) >= 6: self.__name = name else: print(‘名字必须要大于等于6位‘) def get_age(self): return self.__age def set_age(self,age): if 125 > age > 0: self.__age = age else: print(‘没有这种人存在‘) def login(self,password): if self.__name == name and self.__password == password: print(‘登录成功‘) self.__flag = True else: print(‘登陆失败‘) p = Person(‘jack‘,20) p.login(‘jack‘,‘123‘) print(p.name) p.name = ‘jerryganng‘ print(p.name) 二、继承: # 父类 基类 超类 class Person: def __init__(self,age): self.name = name self.age = age self.__money = 10000 def eat(self): print(‘去食堂吃饭!!‘) def sleep(self): print(‘想睡觉了!!‘) # 子类 class Student(Person): def __init__(self): print(‘-------student init‘) class Teacher(Person): def show(self): print(self.name) print(self.__money) # self._Person__money class Admin(Person): pass s = Student() print(s) t = Teacher(‘zhangsan‘,45) print(t) t.eat() t.sleep() print(t.name) print(t.age) # print(t._Person__money) t.show() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |