zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    有关ASP的过程及函数的定义方法及调用
    ASP留言板(在一页里实现所有功能)
    滚动DataGrid
    效果试验
    自己写的身份证号码15位升18位的函数
    [学习笔记]开始学directx了之一
    改写的一个自动生成图片验证码的类asp.net(vb)
    参加了腾讯通RTX客户交流会
    杨伟帆的个人简历
    全国省市县无刷新多级关联菜单
  • 原文地址:https://www.cnblogs.com/jasontang369/p/9222404.html
Copyright © 2011-2022 走看看