python 类属性和实例属性,类方法,实例方法和静态方法

类属性和实例属性

  • 类属性:在Python中我们可以通过类名直接访问的属性,可分为公有类属性和私有类属性(类似于Java中的静态成员变量),公有属性可直接访问,而私有属性则要通过自定义的get和set方法来访问(对象来调用get与set方法)。
  • 实例属性:实例对象(通过类创建的对象)拥有的属性,通过类名无法直接访问。对象可以在外部给直接添加属性(不建议使用,因为对象属性应该封装在类的内部,否则容易产生一些隐式错误),这个属性也叫实例属性。通常来讲,实例属性都在初始化方法__init()内部定义并且由传入的参数赋值(类似Java中的构造方法)。
  • 需要注意的是,对象访问类属性不会对原类属性造成影响,因为当实例化对象后,内存中会给这个对象分配一片空间,因此这个对象访问的类属性是自己这片空间的类属性(相当于副本),所以通过对象直接来改变类属性是无法对原类属性产生影响的。
class people:
   name = "tom"  # 类属性
   __height = 180

   def __init__(self, age):
       self.age = age  # 实例属性
   def getHeight(self):
       return self.__height
   def setHeight(self,height):
       self.__height = height

print("通过类名访问:" + people.name)
p = people(20)
p.name="max"
p.setHeight(190)
print("通过对象访问:%s %d %d"%(p.name,p.age,p.getHeight()))
print("通过类名访问:" + people.name) #p.name="max"并没有影响到原类属性

结果:
在这里插入图片描述

类方法,实例方法和静态方法

  • 类方法:类对象所拥有的方法,需要用修饰器@classmethod来标识,第一个参数必须是类对象,一般以cal作为第一个参数(当然你也可以不叫cal,这只是一种习惯与规范),能够通过实例对象和对象(类名)去访问。类方法可以让实例对象去修改类属性的值(上面已经讲过,实例对象无法直接修改类属性的值)
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性

   @classmethod
   def setName(cls,name):
       cls.name=name

p=people(20)
p.setName("max")
print(people.name)

结果:
在这里插入图片描述

  • 实例方法:实例对象所拥有的方法,类对象无法访问(不能直接通过类名调用)。第一个参数必须是实例对象,一般以self作为第一个参数(同理,你也可以不叫self,这只是一种习惯与规范),通过实例对象去调用。
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性
   def showAge(self):
       print("年龄:%d"%(self.age))

p=people(20)
p.showAge()

结果:
在这里插入图片描述

  • 静态方法:需要通过修饰器@staticmethod,不需要定义参数,可以当做普通函数使用。
class people:
   name = "tom"  # 类属性
   def __init__(self, age):
       self.age = age  # 实例属性

   @staticmethod
   def showAge():
       print("姓名:"+people.name)

people.showAge()
p=people(20)
p.showAge()

结果:
在这里插入图片描述

发布了11 篇原创文章 · 获赞 16 · 访问量 1826

猜你喜欢

转载自blog.csdn.net/qq_44204959/article/details/105193797