python3基础6

面向对象

前言

  • 个人学习笔记,仅供本人复习使用
  • 主要内容来自7七月
  • 第一次记录时间:2020年2月12日

类和对象

定义类:
class关键字
名称推荐使用首字母大写,双英文单词使用两个大写字母

(StudentHomework)
类最基本作用是封装

类的内部
  • 定义变量
  • 定义函数
调用类

实例化

class Student():
    name = ""
    age = 0

    def print_file(self):
        print("name:"+ self.name)
        print("aeg:"+ str(self.age))


student = Student()
student.print_file()

# 输出
name:
aeg:0

类是现实世界或者思维世界的实体在计算机中的反映
他将数据及这些数据上的操作封装在一起

构造函数

实例化时自动调用构造函数

class Student():
    name = ""
    age = 0

    def __init__(self):
        print("student")

    def print_file(self):
        print("name:"+ self.name)
        print("aeg:"+ str(self.age))


student = Student()
a = student.__init__()
print(type(a))

#输出
student
student
<class 'NoneType'>

直接调用构造函数,无返回值

类变量和实例变量

class Student():
    name = ""
    age = 0

    def __init__(self, name, age):
        name = name
        age  = age

    def print_file(self):
        pass

student1 = Student("123", 12)
student2 = Student("124", 15)
print(student1)
print(student2)
print(student1.name)
print(student2.age)

#输出
<__main__.Student object at 0x0000021D6B9DE240>
<__main__.Student object at 0x0000021D6B9DE2B0>

0

# 区分
class Student():
    # 类变量
    name = "333"
    age = 0

    def __init__(self, name, age):
        # 实例变量
        self.name = name
        self.age = age

    def print_file(self):
        pass


student1 = Student("123", 12)
student2 = Student("124", 15)

print(Student.name)
print(Student.age)

print(student1.name)
print(student1.age)
print(student2.name)
print(student2.age)

# 输出
333
0
123
12
124
15

当没有使用self赋值时

class Student():
    
    name = "333"
    age = 0

    def __init__(self, name, age):
        
        name = name
        age = age

    def print_file(self):
        pass


student = Student("123", 12)
print(student.age)
print(student.__dict__)

#输出
0
{}

输出为类变量,实例里无结果,返回空字典
当使用self赋值时

class Student():
    
    name = "333"
    age = 0

    def __init__(self, name, age):
        
        self.name = name
        self.age = age

    def print_file(self):
        pass


student = Student("123", 12)
print(student.age)
print(student.__dict__)
 #输出
 12
{'name': '123', 'age': 12}

小结

  • 访问对象时,会先查找对象变量,即__dict__字典中的内容
  • 如字典中没有时,会去类变量中寻找,返回结果
  • 变量名是self.变量名
class Student():
   
   name = "333"
   age = 0

   def __init__(self, name, age):
       
       self.name = name
       self.age = age

   def print_file(self):
       pass


student = Student("123", 12)
print(student.age)
print(student.__dict__)
print(Student.__dict__)

#输出
12
{'name': '123', 'age': 12}
{'__module__': '__main__', 'name': '333', 'age': 0, '__init__': <function Student.__init__ at 0x000001F21C2C66A8>, 'print_file': <function Student.print_file at 0x000001F21C2C6730>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}  
self与实例方法
  • 实例方法:实例可以调用的方法
  • 定义时第一个参数推荐使用self;调用时不需要写self
  • self指的是调用当前方法的对象,谁调用了这个方法,self指的就是谁

实例方法中访问实例变量与类变量

思维导图内容小结

思维导图内容小结
1、变量与方法
变量:事物的特征
方法::事物的行为
2、方法与变量的关系:
绝大多数情况下,方法需要对变量做一系类运算或者逻辑上的一些操作,最终去改变变量的一些状态
3、构造函数与实例方法的区别

  • 调用方式不一样
    构造函数:类名(参数)
    实例方法:对象.实例方法(参数)
  • 意义不一样
    构造函数:初始化类的特征
    实例方法:描述类的行为

实例方法中访问实例变量与类变量
实例方法访问实例变量:self.变量
实例方法访问类变量

  • self.__class__.变量
  • 类.变量
类方法
    @classmethod
    def demo(cls):
        pass

cls代表类本身
操作与实例无关的类变量

静态方法
    @staticmethod
    def add(x, y):
        print("这是静态方法")

静态方法可以被类或对象调用
静态方法和类方法内部都不能访问实例变量
能用静态方法的地方都可以用类方法代替,正常情况下不需要用静态方法

小结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值