本人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!