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