Python9-封装-day26(大年初三)
class Room:
def __init__(self,name,length,width):
self.__name = name
self.__length = length
self.__width = width
def get_name(self):
return self.__name
def set_name(self,newName):
if type(newName) is str and newName.isdigit() == False:
self.__name = newName
def area(self):
return self.__length * self.__width jin = Room('金老板',2,1)
print(jin.area())
jin.set_name('')
print(jin.get_name())
会用到私有属性这个概念的场景
隐藏起一个属性,不想让类的外部调用
我想保护这个属性,不想让属性随意被改变
我想保护这个属性不被子类继承
# property 内置装饰器函数,只在面向对象中使用
from math import pi
class Circle:
def __init__(self,r):
self.r = r
@property
def perimeter(self):
return 2*pi*self.r
@property
def area(self):
return self.r**2*pi
c1 = Circle(5)
print(c1.area) #圆的面积
print(c1.perimeter) #圆的周长 78.53981633974483
31.41592653589793
class Person:
def __init__(self,name):
self.__name = name
@property
def name(self):
return self.__name + 'sb'
@name.setter
def name(self,new_name):
self.__name = new_name
tiger = Person('tim')
print(tiger.name)
tiger.name = '全班'
print(tiger.name) timsb
全班sb
class Goods:
discount = 0.8
def __init__(self,name,price):
self.name = name
self.__price = price
@property
def price(self):
return self.__price * Goods.discount apple = Goods('apple',5)
print(apple.price)
#删除属性
class Person:
def __init__(self,name):
self.__name = name
@property
def name(self):
return self.__name
@name.deleter
def name(self):
del self.__name
teng = Person('tim')
print(teng.name)
del teng.name
print(teng.name)
class——method
class Goods:
__discount = 0.8
def __init__(self,name,price):
self.name = name
self.__price = price
@property
def price(self):
return self.__price * Goods.__discount
@classmethod #把一个方法变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象
def change_discount(cls,new_discount): #修改折扣
cls.__discount = new_discount
apple = Goods('apple',5)
print(apple.price)
Goods.change_discount(0.5)
print(apple.price)
#当这个方法的操作,只涉及静态属性的时候,就应该使用classmethod 4.0
2.5
staticmethod
# staticmethod
class Login:
def __init__(self,name,password):
self.name = name
self.pwd = password
def login(self):pass
@staticmethod
def get_usr_pwd():
usr = input('用户名: ')
pwd = input('密码: ')
Login(usr,pwd) Login.get_usr_pwd()
#在完全面向对象的过程中
# 如果一个函数,既和对象没有关系,也和类没有关系,那么就用staticmethod将这个函数变成一个静态方法
# 类方法和静态方法,都是类调用的
# 对象可以调用类方法和静态方法 ,一般情况下,推荐用类名调用
# 类方法 有个默认参数 cls 代表这个类
# 静态方法 没有默认的参数 就像函数一样
反射
class Teacher:
dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}
def show_student(self):
print('show_student')
def show_teacher(self):
print('show_teacher')
@classmethod
def func(cls):
print('haha')
tim = Teacher()
for k in Teacher.dic:
print(k)
key = input('pls input :')
# print(Teacher.dic[key])
func = getattr(tim,Teacher.dic[key])
func()
# tim = Teacher()
# tim.show_student()
# func = getattr(tim,'show_student')
# func()
# hasattr() getattr() delattr()
# if hasattr(Teacher,'dic'):
# ret = getattr(Teacher,'dic') #Teacher.dic
# ret = getattr(Teacher,'dic') #Teacher.dic
# ret2 = getattr(Teacher,'func')
# ret2()
# print(ret)
Python9-封装-day26(大年初三)的更多相关文章
- day26、面向对象进阶:多态、封装、反射
一.多态 什么是多态: 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机. 即:调用不同类实例化的对象,下的相同的方法,实现的过程不一样 python中的标准类型就是多 ...
- day26.面向对象-反射封装内置方法
封装 隐藏对象的属性和实现细节,近对外提供公共访问方式 广义:代码保护,面向对象思想 狭义:将属性,方法隐藏起来 class Person: __key = 123456 # 私有的静态属性 def ...
- day26 python学习 对象的接口,封装,私用属性 property
# 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...
- day26 封装、多态、内置函数、反射、动态导入
今日内容 1.封装 什么是封装? 封装从字面意思上看就只将某种东西封起来装好,当我们代码中的某些方法与属性不想让外界进行访问时,就对这些属性进行特殊的处理,使这种属性或者方法不能被外界直接进行访问或者 ...
- Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(2) 自己封装的Calendar接口
本章主要是收藏一些常用的类和接口,包括:万年历(农历.阳历节日.阴历节日).自定义的Calendar接口. 万年历 源码如下(ChineseCalendar.java): package com.vi ...
- 封装,封装的原理,Property ,setter ,deleter,多态,内置函数 ,__str__ , __del__,反射,动态导入模块
1,封装 ## 什么是封装 what 对外隐藏内部的属性,以及实现细节,并给外部提供使用的接口 学习封装的目的:就是为了能够限制外界对内部数据的方法 注意 :封装有隐藏的意思,但不是单纯的隐藏 pyt ...
- Pyhton学习——Day26
#多态:多态指的是一类事物有多种形态# import abc# class Animal(metaclass = abc.ABCMeta):# 同一类事物:动物# @abc.abstractclass ...
- day26——tyoe元类与object的联系、反射、函数与方法的区别、双下方法
day26 type元类与object联系 type 获取对象从属于的类 python 中一切皆对象, 类在某种意义上也是一个对象,python中自己定义的类,以及大部分内置类,都是由type元类(构 ...
- day26(026-网络编程)
###26.02_网络编程(网络编程三要素之IP概述) IPv6:8组,每组4个16进制数. 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f ###26.03_网络编程 ...
随机推荐
- flask_context
定义全局的钩子函数 有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子 例如在请求之前创建数据库连接或者redis连接:或者是系统里面用户请求处理之前先验证用户的身份,是否 ...
- JQuery基础知识梳理篇
这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...
- 牛客寒假6-G.区间或和
链接:https://ac.nowcoder.com/acm/contest/332/G 题意: 求a|(a+1)|(a+2)|...|(b-1)|b. 思路: 求a-b的差的每一个二进制位 自己也看 ...
- EDAS提交论文字体未嵌入
一.深夜更一波,刚刚在EDAS提交论文,提示格式不通过,说我有字体未嵌入.但是之前一直都没有问题,这次只是在LaTeX中嵌图的时候把eps换成PDF了.所以问题应该是出在我的PDF图里,里面有字体未被 ...
- JVM-GC日志分析
程序运行时配置如下参数: -Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio= -XX:+PrintGC ...
- springJDBC 事物隔离
五.Spring-jdbc的实现 第一步:导jar包 pom.xml <!--引入spring-beans节点--><dependency> <groupId> ...
- Todolist总结
一.组件类里面的函数尽可能写成箭头函数的形式,方便绑定this 上面的箭头函数是好的,写面的不好,他需要在用的时候绑定this,或者在constructor绑定,如下: 如上用的时候绑定this是不好 ...
- Arduino中数据类型转换 int转换为char 亲测好使,itoa()函数
由于博主最近在做一个项目,需要采集不同传感器的数据,包括float型的HCHO,以及int型的PM2.5数据.但是最终向服务器上传的数据都得转换为char型才能发送,这是借鉴了一个github上面的实 ...
- Android实现按钮点击效果(第一次点击变色,第二次恢复)
1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" ...
- 基于Myeclipse的三大框架(SSH)整合
文中主要基于Myeclipse进行配置,配置流程为:Hibernate --> Spring --> 整合 --> struts2 -->整合.注意:在此文中,主要讲述基于注解 ...