• day 26


    反射

    
    #反射 *****
    # name = 'alex'
    # 'name'
    
    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('hahaha')
    alex = Teacher()
    for k in Teacher.dic:
        print(k)
    key = input('输入需求 :')
    # print(Teacher.dic[key])
    if hasattr(alex,Teacher.dic[key]):
        func = getattr(alex,Teacher.dic[key])
        func()
    # # alex.show_student()  'show_student'
    # func = getattr(alex,'show_student')
    # func()
    
    # hasattr getattr delattr
    # if hasattr(Teacher,'dic'):
    #     ret = getattr(Teacher,'dic')   # Teacher.dic   # 类也是对象
    # # ret2 = getattr(Teacher,'func')         # 类.方法  teacher.func
    # # ret2()
    #     print(ret)
    
    
    # menu = Teacher.dic
    # for k in menu:
    #     print(k)
    
    # 通过反射
    # 对象名 获取对象属性 和 普通方法
    # 类名 获取静态属性 和类方法 和 静态方法
    
    # 普通方法 self
    # 静态方法 @staticmethod
    # 类方法 @classmethod
    # 属性方法 @property
    
    # 继承
    # 封装的
    
    
    # 学员管理系统 : 开发规范
    # 整理面向对象的所有知识点
    # 时间计划表 :周末干什么 中等偏下的 每周来一天自习
    
    

    封装

    
    # 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
    #         else:
    #             print('不合法的姓名')
    #     def area(self):
    #         return self.__length * self.__width
    #
    # jin = Room('金老板',2,1)
    # print(jin.area())
    # jin.set_name('2')
    # print(jin.get_name())
    
    # 假设父类的私有属性 能被 子类调用么
    # class Foo:
    #     __key = '123'       # _Foo__key
    #
    # class Son(Foo):
    #     print(Foo.__key)     # _Son__key
    
    
    # 会用到私有的这个概念de场景
    #1.隐藏起一个属性 不想让类的外部调用
    #2.我想保护这个属性,不想让属性随意被改变
    #3.我想保护这个属性,不被子类继承
    
    
    
    
    
    # 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) # 圆的周长
    
    # class Person:
    #     def __init__(self,name,high,weight):
    #         self.name = name
    #         self.high = high
    #         self.weight = weight
    #     @property
    #     def bmi(self):
    #         return self.weight / self.high**2
    
    # jin = Person('金老板',1.6,90)
    # jin.bmi = 18
    # classmethod
    # staticmethod
    
    # 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('泰哥')
    # print(tiger.name)
    # tiger.name = '全班'
    # print(tiger.name)
    
    # 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('苹果',5)
    # print(apple.price)
    
    # 属性 查看 修改 删除
    # class Person:
    #     def __init__(self,name):
    #         self.__name = name
    #         self.price = 20
    #     @property
    #     def name(self):
    #         return self.__name
    #     @name.deleter
    #     def name(self):
    #         del self.__name
    #     @name.setter
    #     def name(self,new_name):
    #         self.__name = new_name
    # brother2 = Person('二哥')
    # del Person.price
    # brother2.name = 'newName'
    # brother2
    # del brother2.name
    # print(brother2.name)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    # method 方法
    # staticmathod  静态的方法 ***
    # classmethod   类方法    ****
    # 类的操作行为
    # 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('苹果',5)
    # print(apple.price)
    # Goods.change_discount(0.5)   # Goods.change_discount(Goods)
    # print(apple.price)
    # 当这个方法的操作只涉及静态属性的时候 就应该使用classmethod来装饰这个方法
    
    # java
    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 代表这个类  cls
    # 静态方法 没有默认的参数 就象函数一样
    
    
    # 面向对象的进阶
    # 网络编程
    
    
    
    
    
    
    
    
  • 相关阅读:
    阿里云公网IP不能使用
    Python2 socket TCPServer 多线程并发 超时关闭
    Python2 socket 多线程并发 ThreadingTCPServer Demo
    Python2 socket 多线程并发 TCPServer Demo
    Python socket TCPServer Demo
    Python socket server demo
    jsp注释方式
    面试小结(java基础)
    java 多线程sleep和wait的区别
    Java中Runnable和Thread的区别
  • 原文地址:https://www.cnblogs.com/xibanqiu/p/12633700.html
Copyright © 2020-2023  润新知