绑定方法
'''
与对象进行绑定
# class Student():
# country = 'CHINA'
#
# def __init__(self, name, age):
# self.name = name
# self.age = age
#
# def tell_info(self):
# print("%s-%s" % (self.name, self.age))
#
#
# obj = Student('egon', 30)
# obj.tell_info()
'''
'''
# 绑定给类的
# ip port
import settings
class Mysql():
country = 'CHINA'
def __init__(self, ip, port):
self.ip = ip
self.port = port
def tell_info(self):
print("%s-%s" % (self.ip, self.port))
# 类方法是绑定给类的,类来调用, 把类名当做第一个参数传递
@classmethod
def from_config(cls):
# class_name => Mysql
# obj = self.__class__(settings.IP, settings.PORT)
obj = cls(settings.IP, settings.PORT)
return obj
# def func(self):
#
# self
# self.__class__
obj = Mysql('127.0.0.1', 80)
# obj.tell_info()
# Student.tell_info(obj)
# obj1 = obj.test()
# obj1 = obj.from_config()
# print(obj1.country)
Mysql.from_config() # Mysql.from_config(Mysql)
'''
非绑定方法
非绑定方法:不绑定给对象,也不绑定给类
class Mysql():
def __init__(self, ip, port):
self.ip = ip
self.port = port
@staticmethod # 静态方法
def create_id(x, y, z):
import uuid
print(uuid.uuid4())
obj = Mysql('127.0.0.1',3306)
obj.create_id()
隐藏属性
class People():
__country = 'CHINA' # _People__country
def __init__(self,name,age):
self.name = name
self.age = age
def get_name(self):
return '名字:%s' % self.__country
def set_country(self, v):
if type(v) is not str:
print("country必须是str类型")
return
self.__country = v
def del_country(self):
print("不删除")
obj = People('wuc',18)
print(obj.get_name())
property装饰器
将一个函数功能伪装成一个数据属性
class People():
__country = 'CHINA' # _People__country
def __init__(self, name, age):
self.__name = name
self.age = age
(@property)
def get_name(self):
return self.__name
( @name.setter)
def set_name(self, v):
if type(v) is not str:
print("必须是str类型")
return
self.__name = v
( @name.deleter)
def del_name(self):
print("不能删除")
# 这样写, 必须按照这个顺序
xxx = property(get_name, set_name, del_name)
obj = People('ly', 18)
print(obj.xxx)
obj.xxx = 'EGON'
print(obj.xxx)
del obj.xxx
面向对象的三大特征:
1.封装
2.继承
3.多态
1. 什么是继承?
继承就是一种新建类的方式, 新建的类我们称为字类或者叫派生类, 被继承的类成为父类或者叫基类
子类可以遗传父类的属性
2. 为什么用继承?
类是解决对象与对象之间的代码冗余的
继承是解决类与类之间的代码冗余的
3.如何使用继承?
python支持多继承
经典类:没有继承object类的子子孙孙类都是经典类
新式类:继承了object以及该类的子子孙孙类都是新式类
python2中才区分新式类和经典类
python3 中都是新式类
例
# class Parent1:
# pass
# class Parent2:
# pass
#
#
# class Sub1(Parent1):
# pass
#
#
# class Sub2(Parent1, Parent2):
# pass
# print(Parent1.__base__)
#
# print(Parent2.__base__)
# print(Sub1.__bases__)
# print(Sub2.__bases__)
例
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:
self.courses = []
# self => stu1
People.__init__(self, name, age, gender)
def choose_course(self, course):
self.courses.append(course)
print("%s 选课成功 %s" % (self.name, self.courses))
class Teacher(People):
def __init__(self, name, age, gender, level):
People.__init__(self, name, age, gender)
self.level = level
def score(self, stu_obj, num):
stu_obj.num = num
print("%s老师给%s打了%s分" % (self.name, stu_obj.name, num))
stu1 = Student('tom', 19, 'male')
print(stu1.school)
print(stu1.name)
print(stu1.age)
tea1 = Teacher('tom', 19, 'male', 10)
print(tea1.school)
print(tea1.name)
print(tea1.age)