python的class类

好好学习,天天向上。 / 2023-08-07 / 原文

一.简介
  类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例
  对象(instance/object):包括两个数据成员(类变量和实例变量)和方法,对象就是方法或者类的具体示例
    类变量是所有对象共有,其中一个对象的值改变,其他对象得到的是改变后的效果
       实例变量则属于对象私有,每个实例单独拥有的变量,某个对象的值发生改变,不影响其他对象
  方法:类中定义的函数
 
  局部变量:定义在方法中的变量,只作用于当前实例的类
  类的属性:类中定义的变量和方法都是类的属性
  类变量:定义在类中的属性,可使用全大写来命名
二.实例化 
  实例化:实例化就是创建一个该类的对象,在类对象名称后面加一个括号就调用类的实例化方法,完成实例化。实例化后会自动调用__init__方法
  __init__方法的作用是对示例进行初始化,当创建了这个类的实例时就会调用该方法;
  这个方法的第一个形式参数必须留给self,其他参数随意;self就是指代摸一个实例自身
  该方法不能有返回值只能返回return None
  类实例化后,得到一个实例对象,通过instance.class_name()方式进行调用,实例对象就会被绑定到方法上
  __init__中所定义的变量,是保存在实例上的,并不是类上,所以称为实例变量,实例变量是每个实例自己的变量,是实例独有的
  类变量是类的变量,是所有实例共享的属性和方法 
示例1:
class MyClass():
"my class" #'类的帮助信息'类文档字符串,可通过ClassName._doc_查看
print('in my class')
xx="abc" #一个类变量,它的值可在这个类的所有示例之间共享,可在类内和类外通过ClassName.xx访问
def __init__(self,x,y): #self代表类的实例,self在定义类的方法时是必须的,但调用时不必传入相应的参数
    print('in my class init')

    self.x=x

    self.y= y

    print(x+y)

  def foo(self): #foo 类的属性
    print('in foo')
    return "my class re"
调用:print(myabs.xx)  #执行成功,类变量是共用的
   
print(myabs.x) #执行成功,实例变量是实例独有的
   print(MyClass.xx) #执行成功,类变量是共用的
   print(MyClass.x) #执行失败,实例变量不能共享
返回:in my class   #每次调用均会执行
   abc #调用类变量xx
调用:
print(MyClass.foo)
返回:in my class
   <function MyClass.foo at 0x00000140993099D0>
调用:
print(MyClass.__doc__) #输出类的帮助文档
返回:in my class
   my class
调用:
myabs=MyClass(2,3) #调用myclass类
返回:in my class
   in my class init #调用类则需执行init方法
   5
    #输出init的结论
调用:
myabs=MyClass(2,3)
   print(myabs.foo()) #调用具体的方法
返回:
in my class #调用类输出

   in my class init #调用类时,执行init的输出
   5 #调用类时,执行init的输出
   in foo #调用方法foo的输出
my class re #调用方法foo的返回结论
调用:
print(MyClass.foo(myabs))
返回:in my class         #调用类输出
   in my class init #调用类时,执行init的输出
   5 #调用类时,执行init的输出
   in foo #调用方法foo的输出
my class re #调用方法foo的返回结论
示例2:
class MyClass():
"my class" #'类的帮助信息'类文档字符串,可通过ClassName._doc_查看
print('in my class')
xx="abc" #一个类变量,它的值可在这个类的所有示例之间共享,可在类内和类外通过ClassName.xx访问
def __init__(self,x,y): #self代表类的实例,self在定义类的方法时是必须的,但调用时不必传入相应的参数
    self.x=x

    self.y= y

    print(x+y)

  def foo(self,c): #有单独的变量
    print(c)
    return "my class re"
调用:myabs=MyClass(2,3) 
   myabs.foo(99) #执行成功,返回99
   MyClass.foo(99) #执行失败,foo缺少参数
返回:
99
   my class re
三.对象属性
python中的函数、类、类的实例都是对象,每个不同的对象都有不同的属性
类的属性保存在类的__dict__中,类的属性所有实例都可以访问
实例的
属性保存在实例的__dict__中,实例的属性是自己的,类或其他实例都不可以访问