美文网首页
python面向对象(2):类与实例

python面向对象(2):类与实例

作者: _百草_ | 来源:发表于2020-04-08 13:53 被阅读0次
    # -*- coding:utf-8 -*-
    """
    @author:wlh
    @file:classAndInstance.py
    @time:2020/04/08
    参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017496031185408
    """
    # 类class 是 实例(instance)的模板
    # 实例 是根据 类 创建出来的一个个具体的“对象”
    # 每个对象都拥有相同的方法,但是各自的数据可能不同
    
    
    class Student(object):
        pass
    # 关键字 class,定义类
    # class后紧跟类名,即Student,类名通常首字母大写
    # 之后(object),该类从哪里继承下来;通常,若没有合适的类,就使用object
    # object类是所有类最终都会继承的类
    
    
    class Student2(object):
        def __init__(self, name, score=80):
            """通过定义__init__方法,在创建实例的时候,就把name等属性绑上去"""
            self.name = name
            self.score = score
        # __init__方法的第一个参数永远是self,表示创建的实例本身
        # 在__init__方法内部,就把各种属性绑定到self,故self就指向创建的实例本身
    
    
    std = Student()
    std2 = Student()
    # 定义类后,根据Student类创建Student的实例std
    # 创建实例,通过 类名+([参数])来实现
    # std3 = Student2()  # TypeError: __init__() missing 2 required positional arguments: 'name' and 'score'
    std4 = Student2('wang', 70)  # 有了__init__方法,在创建实例时,必须传入与__init__方法匹配的参数
    # self不需要传,Python解释器会把实例变量传进去
    # 除self外,与普通的函数相同,仍可使用默认参数,可变参数,关键参数和命名关键字参数
    std5 = Student2(score=40, name='hello')
    std6 = Student2('Default parameter')
    
    print(Student)  # <class '__main__.Student'>
    print(std)  # <__main__.Student object at 0x0058FC30>
    print(std2)  # <__main__.Student object at 0x0050F030>
    # 变量std指向的是Student的实例,后面0x0058FC30是内存地址,每个object的地址都不一样
    
    std.name = 'wang'  # 给实例变量绑定属性
    print(std.name)
    print('%s \'s score is %d' % (std4.name, std4.score))
    '''
    print('%d \'s score is %d' % (std4.name, std4.score))
    TypeError: %d format: a number is required, not str
    '''
    # 类可以起到模板作用,因此,可以在创建实例的时候,把一些必须绑定的属性强制填写进去
    print(std5.name, std5.score)
    print('The score of ', std6.name, ' is ', std6.score)
    

    相关文章

      网友评论

          本文标题:python面向对象(2):类与实例

          本文链接:https://www.haomeiwen.com/subject/xqktmhtx.html