绑定方法
# 绑定方法:绑定给类的,绑定给对象的
class Student():
school = 'SH'
?
def __init__(self, name, age):
self.name = name
self.age = age
?
def tell_info(self, v):
?
print('name:%s, age: %s, v:%s' % (self.name, self.age, v))
?
?
?
stu = Student('tom', 19)
?
# 对象来调用方法, 绑定给对象的方法由对象来调用,特殊之处:把对象自己当成第一个参数传递到方法里面
stu.tell_info(10) # stu.tell_info(stu)
?
# 绑定给类的方法
# ip port
class Mysql():
def __init__(self, ip, port):
self.ip = ip
self.port = port
?
# 绑定给类的方法
@classmethod
def from_func(cls):
# Oracle()
return cls('127.0.0.1', '3306')
def func(self):
self.__class__
?
# obj = Oracle('127.0.0.1', 3306)
#
# obj1 = obj.from_func()
# print(obj1)
?
# 类调用
Mysql.from_func() # Mysql.from_func(Mysql)
非绑定方法
# 即不绑定给类,也不绑定给对象
class People():
def __init__(self, name, age):
self.name = name
self.age = age
self.id = self.create_id()
?
@staticmethod
def create_id():
import uuid
return uuid.uuid4()
?
?
obj = People('tom', 19)
# res=obj.create_id() # obj.create_id(obj)
# print(res)
?
print(People.create_id())
# import uuid
# print(uuid.uuid4())
?
'''
非绑定方法:静态方法
1. 加一个装饰器:@staticmethod
2. 函数已经变成普通函数
3. 对象和类都可以调用,
'''
隐藏属性
# 隐藏属性是有应用场景的
1. 如何隐藏?
2. 为什么要隐藏?
?
class Student():
__country = 'CHINA' # _Student__country
?
def __init__(self, name, age):
self.__name = name # _Student__name
self.age = age
?
def __func(self): # _Student__func
print('from func')
?
def get_country(self):
return self.__country # self._Student__country
?
def set_country(self, v):
if not type(v) is str:
print('不是str')
return
self.__country = v
?
?
print(Student.__dict__)
property装饰器
class Student():
__country = 'CHINA' # _Student__country
?
def __init__(self, name, age):
self.__name = name # _Student__name
self.age = age
?
def __func(self): # _Student__func
print('from func')
?
# 把函数伪装成属性
@property
def country(self):
return self.__country # self._Student__country
?
@country.setter
def country(self, v):
if not type(v) is str:
return
self.__country = v
@country.deleter
def country(self):
print('不能删')
stu = Student('tom', 18)
?
# print(stu.country)
?
# stu.country = 'xxx'
# print(stu.country)
del stu.country
继承
1. 什么是继承?
继承就是新建类的一种方式,新建出来的类称为子类或者叫派生类,被继承的类称为父类或者基类
子类可以遗产父类的属性
2. 为什么要用继承?
类解决了对象与对象之间的代码冗余问题
继承解决类与类之间的代码冗余问题
?
3. 怎么用继承?
经典类:没有继承object类的子子孙孙类都是经典类
新式类:继承了object类的子子孙孙类都是新式类
'''只有在python2中才区分经典类和新式类,在python3中都是新式类'''
class People():
school = 'SH'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
?
class Student(People):
def __init__(self, name, age, gender, course=None):
if course is None:
course = []
People.__init__(self, name, age, gender) # 指名道姓的调用
self.course = course
?
def choose_course(self):
print('aaaa')
?
?
class Teacher(People):
def __init__(self, name, age, gender, level):
People.__init__(self, name, age, gender)
self.level = level
?
def score(self):
print('打分')
?
stu = Student('tom', 19, 'male')
tea = Teacher('ly', 20 ,'female', 10)
?
print(stu.name)
print(stu.school)
print(tea.school)