Atopos

导航

绑定方法、非绑定方法及隐藏属性

1.绑定方法

1.1方法绑定给对象
绑定给对象后 
谁来调用就把自己当作第一个参数传到函数里面(self)
eg
  class Student():
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
    def tell_info(self):
        print('name: %s,age:%s, gender:%s' % (self.name, self.age, self.gender))
	stu = Student('ly', 18, 'male')
    stu.tell_info() # stu.tell_info(stu)

1.2方法绑定给类
绑定给类后
类来调用  会自动把类名当作第一个参数传过去(cls)
eg
  class Mysql():
      def __init__(self, ip, port):
        self.ip = ip
        self.port = port

      @classmethod # 这个装饰器很重要
      def from_conf(cls):
        # cls => Oracle
        # obj = Oracle(settings.IP, settings.PORT)
        obj = cls(settings.IP, settings.PORT)
        return obj
  Mysql.from_conf()

2.非绑定方法

2.1概念
既不绑定给对象也不绑定给类

2.2示例
class Student():
    school = 'SH'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    @staticmethod  # 静态方法
    def create_id():
        import uuid
        return uuid.uuid4()

stu = Student('ly', 18)
print(stu.create_id())

3.隐藏属性

3.1如何隐藏属性
在想要隐藏的属性名前加__,__属性名
eg
  class Student():
    __school = 'SH' # _Student__school  => _类名__属性名
    def __init__(self, name, age):
        self.__name = name
        self.age = age

    def __tell_info(self):  # _Student__tell_info  => _类名__函数名
        print('name: %s, age: %s' % (self.__name, self.age))

    def get_school(self):
        return self.__school  # self._Student__school

    def set_school(self, v):
        if type(v) is not str:
            print('数据类型不合法')
        # if isinstance(v, str):
            return
        self.__school = v

ps:
    1. 在类定义阶段,发生了语法上的变形_类名__属性名
    2. 隐藏对外不对内
    3. 只有在类定义阶段发生变形,其他情况都不发生变形了

3.2为何隐藏属性
类里面的隐藏属性, 类外部可以使用,但是目的不是让类外部使用的
类外部要是想用,在类内部开放接口进行访问,从而可以达到对外部数据的严格控制

posted on 2021-12-03 20:38  Atopos_q  阅读(6)  评论(0编辑  收藏  举报