目录
1、定义一个类
- 1.关键字class后面跟着类名,类名通常是大写字母开头的单词。
- 2.紧接着是(object),表示该类是从哪个类继承下来的。
- 3.如果没有合适的继承类,就使用object类,这是所有类最终都会继承下来的类。
class Student(object):
pass
2、定义类属性(参数)和方法(函数)
class Person(object):
# 2.定义类属性(参数)和方法(函数)
# 类属性
name = 'jason'
age ='100'
# 类方法
def say(self):
print('name: {0}。age: {1}.'.format(self.name,self.age))
3、使用__init__初始化类属性
- 在python中有一个特殊的__init__方法,在我们使用该类创建实例的时候就会自动运行。
- 所有我们可以把一些公共的东西放到__init__方法中。
- __init__方法的第一个参数永远都是self,表示创建实例本身。
- 在__init__方法内部,可以把各种属性绑定到self,因为self指向创建的实例本身
class Person(object):
# 初始化函数,在类初始化时可以传入参数.第一个必须是self 实例本身
def __int__(self, name, age):
self.name = name
self.age = age
# 类方法
def say(self):
print('name: {0}。age: {1}.'.format(self.name, self.age))
4、创建实例调用类方法
class Person(object):
# 创建实例时,会自动运行这个初始化函数,初始化类属性和方法
def __init__(self, name, age):
self.name = name
self.age = age
def say(self):
print('name: {0}。age: {1}.'.format(self.name, self.age))
# 1 创建实例
jason = Person('Jason', 18)
# 2 打印类属性
print(jason.name)
#输出内容:Jason
print(jason.age)
#输出内容:18
# 3 调用类方法
jason.say()
# 输出内容:name: Jason。age: 18.
5、访问限制
- 在属性前加两个下划线(__),就可以把属性变为私有属性;外部无法访问私有属性。
class Person(object):
def __init__(self, name, age):
self.name = name
self.__age = age # 设置age为私有属性
jason = Person('Jason', 18)
# 1.尝试访问私有属性
print(jason.__age)
#运行后,系统就会报错提示:#AttributeError: 'Student' object has no attribute '__age'
# 2.当然也可以通过其他的方法访问这个私有属性。
print(jason._Person__age)
#运行后就可以成功输出age的值:18
6、继承
- 继承就是从父类继承一切, 多态就是重置一些父类也有的属性/方法,使其实现子类的特殊性.
- 继承的好处在于可以减少重用代码, 实现更抽象,也是多态的基础.
- 多态的好处在于有共同的某个方法,可以在传入后根据类的不同/特性来调用相应方法.
class Parent(object): # 创建父类
def __init__(self, name):
self.name = name
def eat(self):
print('%s is eating...' % self.name)
class Child(Parent): # 定义子类
def __init__(self, name):
Parent.__init__(self, name) # 继承父类的属性
# 调用子类
c = Child('Jason')
c.eat()
# 输入内容:Jason is eating...
7、多态
- 多态就是重置一些父类也有的属性/方法,使其实现子类的特殊性.
- 简单来说,多态就是改写父类的方法,让子类拥有属于自己的独特的方法。
class Parent(object): # 创建父类
def __init__(self, name):
self.name = name
def eat(self):
print('%s is eating...' % self.name)
class Child(Parent): # 定义子类
def __init__(self, name):
Parent.__init__(self, name) # 继承父类的属性
def eat(self):
print('%s 正在吃东西。' % self.name)
# 调用子类,这里就会调用子类的方法。
c = Child('Jason')
c.eat()
# 输入内容:Jason 正在吃东西。
8、多重继承
- 多重继承(指定多个父类), 通过多重继承来获得附属的新属性和功能, 这种设计又叫Mixin设计,
- 多重继承时, 若多个父类中有相同的方法, 则排在前的父类将覆盖后面的,则越靠前越”主类”. 即使主类的方法源自父类的父类, 也依然优先.
# 创建父类1
class Father(object):
def __init__(self, name):
self.name = name
def play(self):
print('%s is playing...' % self.name)
# 创建父类2
class Mother(object):
def __init__(self, food):
self.food = food
def eat(self):
print('eating %s' % self.food)
# 创建子类,从父类1和父类2继承
class Child(Father, Mother):
def __init__(self, name, food):
Father.__init__(self, name) # 继承父类1的属性
Mother.__init__(self, food) # 继承父类2的属性
c = Child('Jason','apple')
c.play()
c.eat()
#输出内容:
# Jason is playing...
# eating apple
9、对象属性和类属性
# 1.对象属性和类属性
class Person(object):
name = 'Person_name' # name:类属性
def __init__(self, age):
self.age = age # age:对象属性
p = Person(500)
print('类属性:' + Person.name)
print('对象属性:' + str(p.age))
# 输出内容:
# 类属性:Person_name
# 对象属性:500
# 2.增加对象属性
p.sex = '男'
print(p.sex)
# 输出内容:男
# 3.删除对象属性
del p.sex
10、.增加/删除对象属性
# 1.对象属性和类属性
class Person(object):
pass
p = Person()
# 1.增加属性
p.age = 100
print(p.age)
# 输出内容:100
# 2.删除属性
del p.age
print(p.age)
# 提示:AttributeError: 'Person' object has no attribute 'age'
11、动态给实例添加属性和方法
# 0.定义一个类
class Parson(object):
pass
p = Parson()
# 1.动态添加属性
p.name = 'Tom'
print(p.name)
# 输出内容:Tom
# 2.动态添加方法
from types import MethodType # 导入需要用的模块
# 需要添加的方法
def say(self):
print('my name is ' + self.name)
p.speak = MethodType(say, p)
p.speak()
# 输出内容:my name is Tom