杨桃的Python基础教程——第8章:Python类和对象(六)类方法、类属性、静态方法

本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/Python-Primary-Learning

8.6 类方法和实例方法

在本章的前面部分,我们都是定义了一个类之后,实例化这个类的对象,再去调用类中的方法,这叫实例方法

实际上,也存在类不需要实例化对象就可以直接调用的方法,这叫类方法

类方法需要加上装饰器@classmethod

实例可以调用实例方法和类方法,但类只能调用类方法。

Python类方法举例

class Animal():
#实例方法
  def __init__(self):      #实例方法的默认参数是self
    #实例属性
    self.name="小花"
  def test1(self):
    print(self.name)
  #类方法需要加上装饰器
  @classmethod         
  def test2(cls):           #类方法的默认参数是cls
    cls.num=100
    print(cls.num)

cat=Animal()               #Animal类的实例化对象cat
cat.test1()                   #实例可以调用实例方法test1
#Animal.test1()           #类不能调用实例方法test1
cat.test2()                   #实例可以调用类方法test2
Animal.test2()             #类可以调用类方法test2

运行结果:
小花
100
100

8.7 类属性和实例属性

在类中定义的属性,放在构造方法def __init__()里面,叫实例属性

放在构造方法外面,叫类属性

实例可以访问实例属性和类属性,但 类只能访问类属性。

类属性有一个很重要的特性:在不同的实例对象之间可以共享,这类似于Java中的全局变量。

Python类属性举例:

class Person():
  #类属性
  num=0
  def __init__(self,name):
    self.name=name
    n=0
    n+=1               #实例属性每次调用会从初始的值开始
    Person.num+=1      #类属性每次调用会保留上次调用的值,类属性的调用要加类名
    print("name=",name)
    print("n=",n)
    print("Person.num=",Person.num) 

a=Person("小明")
b=Person("小陈")
c=Person("小李") 

运行结果:
name= 小明
n= 1
Person.num= 1
name= 小陈
n= 1
Person.num= 2
name= 小李
n= 1
Person.num= 3

Java全局变量举例:

//Person类
public class Person {
  public static int num=0;
  public String name;
  public int n;

  public void Person(String name) {
    this.name = name;
    n=0;
    n=n+1;
    num=num+1;
    System.out.println("name="+this.name);
    System.out.println("n="+n);
    System.out.println("Person.num="+num);
  }
}

//PersonTest类
public class PersonTest {
  public static void main(String[] args) {
    Person a = new Person();
    a.Person("小明");
    Person b = new Person();
    b.Person("小陈");
    Person c = new Person();
    c.Person("小李");
  }
}

运行结果:
name=小明
n=1
Person.num=1
name=小陈
n=1
Person.num=2
name=小李
n=1
Person.num=3

8.8 静态方法

静态方法是类中的函数,不需要实例。

静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。静态方法无法调用类中的属性和方法。

静态方法需要加上装饰器@staticmethod

Python静态方法举例

import time

class TimeTest():
  def __init__(self, hour, minute, second):
    self.hour = hour
    self.minute = minute
    self.second = second

  #普通方法
  def showTime(self):
    print('%s:%s:%s' %(self.hour,self.minute,self.second))

  #静态方法需要加上装饰器
  @staticmethod
  def showCurrentTime():
    return time.strftime("%H:%M:%S", time.localtime())

t = TimeTest(22, 15, 10)
t.showTime()
print(TimeTest.showCurrentTime())

运行结果:
22:15:10
16:01:21

参考教程:

廖雪峰的Python教程

https://www.liaoxuefeng.com/wiki/1016959663602400

廖雪峰的Java教程

https://www.liaoxuefeng.com/wiki/1252599548343744

Python3 教程 | 菜鸟教程
https://www.runoob.com/python3/
 

如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!
 

发布了55 篇原创文章 · 获赞 16 · 访问量 6111

猜你喜欢

转载自blog.csdn.net/yty_7/article/details/104225915