Loading

04_Python_代码容器(类)

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

posted @ 2018-06-25 00:28  面包的储物间  阅读(546)  评论(0)    收藏  举报