# -*- 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)
网友评论