Starfruit Python Basic Tutorial-Chapter 8:Pythonのクラスとオブジェクト(6)クラスメソッド、クラス属性、静的メソッド

私の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

リファレンスチュートリアル:

Liao XuefengのPythonチュートリアル

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

Liao XuefengのJavaチュートリアル

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

Python3チュートリアル| Rookieチュートリアル
https://www.runoob.com/python3/
 

この章があなたに役立つと思うなら、フォローして、コメントして、いいね!Githubはあなたのフォローとスターを歓迎します!
 

公開された55元の記事 ウォン称賛16 ビュー6111

おすすめ

転載: blog.csdn.net/yty_7/article/details/104225915