>  기사  >  백엔드 개발  >  Python 객체 지향 프로그래밍의 클래스 및 메서드 정보

Python 객체 지향 프로그래밍의 클래스 및 메서드 정보

高洛峰
高洛峰원래의
2017-03-01 13:33:381356검색

클래스와 인스턴스

파이썬은 객체지향 언어인데, 객체지향의 가장 중요한 개념은 클래스와 인스턴스가 아니었던 것으로 기억합니다. 처음 배웠을 때 개념을 잘 이해했어요. 선생님이 "깃털새가 모인다"고 하더군요. 그렇죠, 분류

깃털새가 모인다는 것입니다

실제로 동일한 특성을 가진 것들을 하나의 카테고리로 묶는 것이 클래스입니다. 예를 들어 인간

class Person(object):
  pass

인간을 정의했습니다. 클래스이지만 인간에게는 두 눈과 입과 같은 몇 가지 특성이 있으므로

class Person(object):
  eyes = 2
  mouth = 1

에 추가합니다. 이미 그 사람에 대한 정보를 몇 개 작성했지만 저 사람은 아직 이름이 있어요, 저처럼 밍크.. 뭐 나쁘게 대할 수는 없어요.

class Person(object):
  eyes = 2
  mouth = 1
  name = mink

너무 완벽해요. 사람이 드디어 완성했는데 1분 걸렸네요(농담) 메시지를 읽어보시죠. 인간은 눈이 두 개고, 입도 하나 있는데, 이름이 밍크예요 - -! 내 이름이요~ 인간은 왜 밍크라고 불리는 걸까요?
밍크는 인간의 이름입니다. 인간의 이름이 밍크라는 것은 명백히 잘못된 것입니다. "wo"는 인간 개인이어야 합니다

rreee

이제 모두에게 공유하는 대신 나만의 이름이 생겼습니다. 이 방법을 인스턴스라고 합니다. 하지만 남들에게는 없는 스킬이 있어서 중력에 영향을 받지 않습니다. .

class Person(object):
  eyes = 2
  mouth = 1
  
  def __init__(self, name):
    self.name = name 

me = Person('mink')

클래스 메소드와 정적 메소드
python 클래스 메소드라고 불리는 @classmethod, @staticmethod를 자주 볼 수 있습니다.

class Person(object):
  eyes = 2
  mouth = 1

  def __init__(self, name)
    self.name = name 

  def jineng(self, txt):
    print "%s %s" % (self.name, txt)

me = Person('mink')
me.jineng("我不受重力影响, 我会飞")

는 동물 클래스를 생성하고 고양이 인스턴스를 생성하고, 고양이의 이름과 나이를 인쇄하면 Animal의 속성을 볼 수 있습니다. 즉, 인스턴스는

class Animal(object):
  name = 'lili'
  age = 1

cat = Animal()
print cat.name, cat.age   # print 'lili' 1

클래스의

속성에 액세스합니다. 즉, 이 메서드가 기본적으로 추가됩니다. 인스턴스 메서드는 인스턴스의 속성을 수정하지만 클래스의 속성은 변경되지 않습니다.

# 显示内容是一样的
print cat.name, cat.age
print Animal.name, Animal.age
给Animal类添加一个方法(函数)

class Animal(object):
  name = 'lili'
  age = 1

  def edit(self, name, age):
    self.name = name
    self.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'lili' 1

인스턴스 메서드는 인스턴스의 속성을 수정할 수 없다는 설명입니다. 클래스의 속성인데, 클래스의 속성을 수정하고 싶다면 어떻게 해야 할까요

# 我们修改一下这个函数
def edit(self, name, age):
  name = name
  self.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # pirnt 'rol' 2
print Animal.name, cat.age   # print 'lili' 1

여기서 주목해야 할 것은 의 첫 번째 매개변수입니다. 편집 함수 Self는 cls가 됩니다. Python에서는 클래스 메서드에서 cls를 사용하는 것이 좋으며 인스턴스 메서드의 매개 변수는 self이며 여기서는 인스턴스가 클래스 메서드(함수)를 사용할 수 있다고 설명합니다.
그러면 추가하겠습니다. 속성을 초기화하려면

# 再一次修改edit
@classmethod
def edit(cls, name, age):
  cls.name = name
  cls.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'rol' 2

__init__을 추가한 후 cat은 더 이상 클래스의 속성을 사용하지 않으며 edit 메소드를 수정하면 됩니다. cat 인스턴스의 속성을 변경하지 마세요.

class Animal(object):
  name = 'lili'
  age = 1

  def __init__(self, name, age):
    self.name = name
    self.age = age
  ...

cat = Animal('kuku', 4)
cat.edit('rol', 2)

print cat.name, cat.age     # print 'kuku' 4
print Animal.name, Animal.age  # print 'rol' 2

이는 정적 메서드가 인스턴스의 속성과 메서드를 사용할 수 없으며, 물론 클래스도 사용할 수 없음을 의미합니다. 그 반대는 사실입니다

# 添加staticmethod
@staticmethod
def say_name(name=None):
  if not name:
    name = self.name
  print 'my name is %s.' % name

cat = Animal('kaka', 3)
cat.say_name()        
# 运行的话会报 NameError: global name 'self' is not defined  
# 那是不是没给他添加self字段, 所以没找到
def say_name(self, name=None):
  ...

cat.say_name()
# TypeError: say_name() takes at least 1 argument(0 given), 显示缺少参数

정적 메서드는 클래스 메서드와 인스턴스 메서드를 통해 액세스할 수 있습니다.
요약:
정적 메소드(staticmethod)

정적 메소드는 인스턴스를 사용할 수 없습니다. 속성 및 메소드

정적 메소드는 클래스의 속성 및 메소드를 사용할 수 없습니다.

정적 메소드는 클래스 또는 인스턴스를 통해 호출할 수 있습니다.

정적 메소드는 클래스 내에 범위가 있는 전역 함수와 동일합니다

클래스 메소드(classmethod)

클래스 메소드는 클래스의 속성과 메소드를 사용할 수 있습니다

클래스 메소드는 정적 메소드를 사용할 수 있습니다

클래스 메소드는 클래스 또는 인스턴스 호출을 사용할 수 있습니다.


Python 객체의 클래스 및 메소드에 대한 추가 기사를 보려면- 프로그래밍 지향적이라면 PHP 중국어 웹사이트를 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.