新手上路请多担待

1

2

封装

3

私有化封装

#__author : 'liuyang'
#date : 2019/3/29 0029 上午 9:35
# 不想让别人看 修改 我的属性
# 源码来说
# 用户名 和 密码
# 狭义上的封装 : 私有化的方法 和属性
# 广义上的封装 : 把方法和属性根据类别装到类中 #方法\静态变量\实例变量(对象属性)都可以私有化
#所谓的私有化:
#就是只能在类的内部课件,
#类的外部是不能访问或者查看
class Goods:
def __init__(self,name,proce):
self.name = name
self.__price = proce#私有属性
def get_price(self):
print(self.__price)
apple = Goods('苹果',2)
# print(apple.get_price().__price)
apple.get_price()
import hashlib
# class Auto:
# def __init__(self,name,pwd):
# self.name = name
# self.pwd = name
# def md5(self):
# md5 =
# md5.update() class Goods:
def __init__(self,name,price):
self.name = name
self.__price = price
def get_price(self): #内部 self._类名__属性
print(self.__price)
def set_num(self):
self.__num = 20
apple = Goods('苹果',5)
# print(apple.__price) #AttributeError: 'Goods' object has no attribute '__price'
print(apple.__dict__) #{'name': '苹果', '_Goods__price': 5}
print(apple._Goods__price) #5 #私有的形成
# 定义了私有的只不过 是改了一个名 并不是真正的隐藏了 隐姓埋名
# 所有的私有的变化都是 在类的[内部]定义完成的
apple.__num = 10
print(apple.__dict__)
# print(self._apple__selfnum)
class Foo:
def __init__(self):
self.__func()
def __func(self): #私有化 _Foo__func()
print('foo')
class Son(Foo): #_Son__func() 指针去找init init 找_Foo__func()
def __func(self):
print('son')
Son() #改名了 class User:
def __wahaha(self):
print('') ##self._User__wahaha()
class V(User): #AttributeError: 'V' object has no attribute '_V__wahaha'
def func(self): #self._V__wahaha()
self.__wahaha()
# V().func()
#私有的这个概念: 单反不在一个类里就报错
#私有的所有内容: 实例变量(对象属性)
#静态变量(类变量),方法都不能被子类继承 class User:
def wahaha(self):
print('') ##self._User__wahaha()
class V(User): #AttributeError: 'V' object has no attribute '_V__wahaha'
def func(self): #self._V__wahaha()
self.wahaha()
V().func() #1 func()执行了 类().方法()
# 不是 __init__ 的 V() # 公有的 再累的内部随便用public
# 其它语言里 外部不能用 可以继承的 保护的
#私有的 private 只能在类的内部使用 既不能被继承 也不能再累的外部使用

4

property

# 私有 property 是一对好搭档
# 圆形类
# 计算面积 计算周长
# 半径 面积 周长 --->属性 class Circle:
def __init__(self,r):
self.r = r
@property #把装饰的一个方法伪装成一个属性
def area(self):
return 3.14*self.r**2
c1 = Circle(5)
print(c1.r)
c1.r = 10
print(c1.area) #更符合属性
import time
class Person:
def __init__(self,name,birth):
self.name = name
self.birth = birth
@property
def age(self):
struct = time.localtime()
age = struct.tm_year - int(self.birth.split('-')[0])
return age liuda = Person('liuda','1999-8-19') print(liuda.age)

私有概念+property 不能改

#__author : 'liuyang'
#date : 2019/3/29 0029 上午 11:08
#一个属性 只让看不让改
class Goods:
dicount = 0.8 # 全场折扣
print(dicount) #这里可以
def __init__(self,name,price):
self.name= name
self.__price = price
@property #只支持 obj.price 的方式查看这个结果
def price(self): #这个编程了self.price
# 在里面用得用self.dicount
return self.__price * self.dicount #下一个是静态变量
#self.dicount 和 Goods.dicount 的区别是 类名改了就得又改 #原价格 @price.setter # 1,前者伪装过 2.后两个和前面的同名
def price(self,value):
if type(value) is int or type(value) is float:
self.__price = value
# print('--->',value) apple = Goods('shu',5)
apple2 = Goods('shus',2)
print(apple.price) # apple.price = 10 # 只能看不能改
apple.__price = 1000 # 不能改 这里 随便改
print(apple.__price) #
print(apple.price) # Goods.dicount =1
print(apple.price)
print(apple2.price)
# apple.__price = 2
apple.price = 8 #对应的调用的是被setter装饰的price方法
print(apple.price) #对应调用的是被property装饰的price # 后面很多条件
# 如果我们定义的是普通的变量或者属性
#那么这个属性可以从外部直接访问
#可以任意的修改 obj.attr = 123
#甚至可以删除 del obj.attr
#私有化
#把一个属性加上双下划线__属性名
#这个属性就连在外面看都看不见
#我们实际上有些场景允许别人看,不许改
#__属性
#@property 装饰的属性名
#def 属性名():
#我们允许别人看,也允许别人改,但是不能瞎改,有一些要求
# __属性
# @property 装饰的属性名
# def 属性():return__属性 # @属性.setter
# def 属性(self ,value):
#加点条件
#
#__author : 'liuyang'
#date : 2019/3/29 0029 上午 11:08
#一个属性 只让看不让改
class Goods:
dicount = 0.8 # 全场折扣
print(dicount) #这里可以
def __init__(self,name,price):
self.name= name
self.__price = price
@property #只支持 obj.price 的方式查看这个结果
def price(self): #这个编程了self.price
# 在里面用得用self.dicount
return self.__price * self.dicount #下一个是静态变量
#self.dicount 和 Goods.dicount 的区别是 类名改了就得又改 #原价格 @price.setter # 1,前者伪装过 2.后两个和前面的同名
def price(self,value):
if type(value) is int or type(value) is float:
self.__price = value
# print('--->',value) @price.deleter
def price(self):
del self.__price # 有这个才删除
print('执行我了') apple = Goods('shu',5)
apple2 = Goods('shus',2)
print(apple.price) # apple.price = 10 # 只能看不能改
apple.__price = 1000 # 不能改 这里 随便改
print(apple.__price) #
print(apple.price) # Goods.dicount =1
print(apple.price)
print(apple2.price)
# apple.__price = 2
apple.price = 8 #对应的调用的是被setter装饰的price方法
print(apple.price) #对应调用的是被property装饰的price ## apple.__price = 2 不能 所以 #@price.setter
# del apple.__price 不能外部删除 所以#@price.deleter apple.price #@property
apple.price = 9 #@price.setter #函数里得有修改
del apple.price #@price.deleter #函数里得有删除
print(apple.__dict__)
#apple.__price = 1000 # 不能改 这里 随便改
#{'name': 'shu', '__price': 1000} # 后面很多条件
# 如果我们定义的是普通的变量或者属性
#那么这个属性可以从外部直接访问
#可以任意的修改 obj.attr = 123
#甚至可以删除 del obj.attr
#私有化
#把一个属性加上双下划线__属性名
#这个属性就连在外面看都看不见
#我们实际上有些场景允许别人看,不许改
#__属性
#@property 装饰的属性名
#def 属性名():
#我们允许别人看,也允许别人改,但是不能瞎改,有一些要求
# __属性
# @property 装饰的属性名
# def 属性():return__属性 # @属性.setter
# def 属性(self ,value):
#加点条件
#修改__属性 #私有的:通过给__名字这样的属性 或者方法加上当前所在类的前缀,把属性隐藏其阿里
#只能在本类的内部使用,不能再类的外部使用,不能被继承 #property 把一个方法 伪装成属性 #property 和私有的两个概念一起用
#定义一个私有的
#在定义一个同名共有的方法, @property装饰 #在定义一个同名共有的方法,@方法名.setter
#在定义一个同名共有的方法,@方法名.deleter

6  类和self   classmethod

#__author : 'liuyang'
#date : 2019/3/29 0029 下午 12:22
class Goods:
dicount = 0.8 # 全场折扣
print(dicount) #这里可以
def __init__(self,name,price):
print(self,'')
self.name= name
self.__price = price
@property #只支持 obj.price 的方式查看这个结果
def price(self): #这个编程了self.price
# 在里面用得用self.dicount
return self.__price * self.dicount #下一个是静态变量
#self.dicount 和 Goods.dicount 的区别是 类名改了就得又改
# self.dicount 不好使 ,goods.dicount keyi
# def chang_disount(self,value): #self没有用
# Goods.__discount = value # 用类
@classmethod #把一个对象方法改成了类方法 #把self改成了类
def chang_disount(cls,value): #self没有用
print(cls,'',Goods) #<class '__main__.Goods'> 1 <class '__main__.Goods'>
cls.__discount = value # 用类 @classmethod
def get_discount(cls):
return cls.__discount
# Goods.chang_disount() #
A = Goods('apple',2) Goods.chang_disount(12)
A.chang_disount(12)
print(A.get_discount()) # 类方法
#1.有些时候我们要修改的是类中的静态变量/类变量
# 此时根本不会和self有任何的操作关联
#这时传一个 self参数对我们完全没有用
#我们希望接受的是当前我们所在的类
appp = Goods('apple',2)
appp.chang_disount(1)
print(Goods.get_discount()) # 类方法 推荐使用类名调用而不是使用对象名调用
# 没写死 自动传 类名

7  自己想代码 想python语法的用法  想龟叔的想法 python 设计思想

class A:
# def func(): #不错
@staticmethod #声明一个普通的不会使用类相关的方法
def func(): #此时func是一个静态方法
print('既不操作和self相关')
print('也不操作和类名相关')
A.func() # login() 登录功能
class Student:
def __init__(self,name,age):
self.name = name
self.age =age
@staticmethod
def login(self):pass #先获取这个学生的用户名和密码
#判断他登录成功之后进行实例化 # a = Student('liuda',2)
Student.login()
stu = Student('liuda') # 先进行思考
#方法就在那,
#自己有想法,先学,去想python的用法
# 有一些也可能是老师也没想到的

#  思维导图写

#凌晨5点备课到 8点上课  讲课到凌晨1点   下课凌晨2点 上海的分培训机构

python学习 day22 (3月29日)----(生成器推导式)的更多相关文章

  1. python学习 day11 (3月16日)----(生成器内置函数)

    1生成器 1生成器的本质 一定是迭代器(反之不一定(用send(生成器特有方法)验证))2生成器是可以让程序员自己定义的一个迭代器3生成器的好处,节省内存空间4生成器的特性,一次性的,惰性机制,从上往 ...

  2. Python 学习日志9月20日

    9月20日 周三 多大年龄了,还活得像个小孩.——急什么,人生又不长. 你习惯了思考宇宙星辰,一百年真的不长,一生也就不那么长,许多人的价值观念你也就无法理解.同样,许多人也无法理解你的价值观念,感兴 ...

  3. Python 学习日志9月19日

    9月19日 周二 今天是普通的一天,昨天也是普通的一天,刚才我差点忘记写日志,突然想起来有个事情没做,回来写. 今天早晨学习<Head First HTML and CSS>第十一章节“布 ...

  4. Python学习日志9月17日 一周总结

    周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...

  5. Python 学习日志9月21日

    9月21日 周四 今天是个特殊的日子吗,总感觉9月21这个日子听着怪怪的. 今天早晨看<Head First HTML and CSS>第13章节“表格和更多列表”,内容不多,看完并做了详 ...

  6. Python学习日志9月13日

    昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...

  7. python学习笔记:第12天 列表推导式和生成器

    目录 1. 迭代器 2. 推导式 1. 迭代器 什么是生成器呢,其实生成器的本质就是迭代器:在python中有3中方式来获取生成器(这里主要介绍前面2种) 通过生成器函数获取 通过各种推导式来实现生成 ...

  8. Python学习日志9月16日

    刚才我差点睡着了,差资料的时候太费神,有些累. 今天早晨学习了<head first HTML and CSS>,今天把昨天没看了的关于字体和颜色的一章节看完了,真长.我详细的做了笔记,并 ...

  9. python学习 day21 (3月28日)----(抽象类 多态 nametuple dump)

    不要因为走的路太久了,而忘记了为了什么而出发. 提前作准备了吗?把思维导图的东西做了吗? 和工作了几年的人,相比,是不是相同的水平,如果要写简历的话. 一边学习,一边复习. 小就是大,少就是多. 1. ...

随机推荐

  1. vue-cli 配置 proxyTable pathRewrite

    vue-config-index.js中,proxyTable中的pathRewrite有什么用呢? 首先,在ProxyTable模块中设置了‘/api’,target中设置服务器地址,也就是接口的开 ...

  2. HDU-1459.非常可乐(BFS )

    这道题TLE了很多次,原来一直以为将数字化为最简可以让运算更快,但是去了简化之后才发现,真正耗时的就是化简....还和队友学到了用状态少直接数组模拟刚就能过... 本题大意:给出可乐的体积v1,给出两 ...

  3. Codeforces Beta Round #63 (Div. 2)

    Codeforces Beta Round #63 (Div. 2) http://codeforces.com/contest/69 A #include<bits/stdc++.h> ...

  4. vue 登录前做校验this.$router.push(location)

    有很多按钮在执行跳转之前,还会执行一系列方法,这时可以使用 this.$router.push(location) 来修改 url,完成跳转 例如:登录按钮,点击时需要先判断验证码等是否正确,此时

  5. HDU 2680 Choose the best route(SPFA)

    Problem DescriptionOne day , Kiki wants to visit one of her friends. As she is liable to carsickness ...

  6. 【转自牛客网】C++类职位校招

    作者:./a.out链接:https://www.nowcoder.com/discuss/14022来源:牛客网 话说在牛客网上混迹了半年,也没啥拿的出手的贡献.现在基本上自己的校招生涯要告一段落, ...

  7. TableView中Label自适应高度

    //Xcode6.3以后label自适应需要添加两个属性 _tableView.rowHeight = UITableViewAutomaticDimension; //给予预计行高 _tableVi ...

  8. Activity横竖屏切换时 一些数据的保存

    private VideoView videoView; 02.private static final String VIDEO_PATH = Environment 03. .getExterna ...

  9. 记录css的常用属性

    background-color:背景颜色 color:字体颜色 text-align:标签内容的位置 margin-left:左外边距 font-size:字体大小 font_family:字体格式 ...

  10. vue2.0插件

    1.better-scroll 参考网址:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/ better-scroll 是什么 firs ...