Home > Backend Development > Python Tutorial > About classes and methods in Python object-oriented programming

About classes and methods in Python object-oriented programming

高洛峰
Release: 2017-03-01 13:33:38
Original
1489 people have browsed it

Classes and instances

Python is an object-oriented language, and the most important concepts of object-oriented are classes and instances. I remember that I didn’t understand these very well when I first learned it. Concept, until the teacher said "birds of a feather flock together". That's right, it's a class. Classification

birds of a feather flock together

A class actually means grouping things with the same characteristics into one category. For example, human

class Person(object):
  pass
Copy after login

We have defined the class human, but human has some characteristics, such as two eyes and a mouth, we add these in

class Person(object):
  eyes = 2
  mouth = 1
Copy after login

I have already written some information about the person, but the person still has a name, such as me mink. Well, I can’t treat myself badly, I have to add these in

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

It’s so perfect, one person finally finished it. God took me a day and I took a minute (just kidding), let’s read the message. Human being There are two eyes, one mouth, and the name is mink. - -! Something is wrong, mink is my name~ Why are humans called mink?
mink is the name of humans. It is obviously wrong for humans to be named mink. , "wo" should be a human individual, a single example

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

me = Person('mink')
Copy after login

Now I finally have my own name instead of sharing it with everyone, this method is called instance But I have a skill that others don’t have, I am not affected by gravity.

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("我不受重力影响, 我会飞")
Copy after login

##Class methods and static methods
python You can often see @classmethod and @staticmethod, which are called class methods and instance methods.

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

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

Created an animal class and generated a cat Instance, print cat's name and age, you can see that what is returned is the attribute of Animal class, that is, the instance accesses the

attribute of the class

# 显示内容是一样的
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
Copy after login

That is to say, this method added by default is an instance method. The instance method modifies the attributes of the instance, but the attributes of the class do not change

# 我们修改一下这个函数
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
Copy after login

Explain that instance methods cannot modify the attributes of the class, but what should I do if I want to modify the attributes of the class?

# 再一次修改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
Copy after login

What needs to be noted here is the first parameter of the edit function Self becomes cls. In python, it is recommended that you use cls in class methods and the parameter of instance method is self, and it is explained here that instances can use class methods (functions)

Then I am adding an init method to this class To initialize the attributes

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
Copy after login

After adding __init__, cat no longer uses the attributes of the class, and modifying the edit method does not change the attributes of the cat instance.

# 添加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), 显示缺少参数
Copy after login

This means that staticmethod cannot use the attributes and methods of instances, and of course it cannot use classes. Then the reverse is true

# 我们修改一下代码
# 先创建一个实例的方法, 他使用类的staticmethod

@staticmethod
def say_name(name):
  print 'my name is %s.' % name

def say(self):
  self.say_name(self.name)
  
@classmethod
def _say(cls):
  cls.say_name(cls.name)

cat = Animal('kaka', 3)
cat.say()
cat._say()
Copy after login

staticmethod can be accessed through class methods and instance methods.


To summarize:
static method (staticmethod)

Static methods cannot use instances. Properties and methods

Static methods cannot use the properties and methods of the class

Static methods can be called through classes or instances

Static methods are equal to global functions with scope in the class

Class method (classmethod)

Class method can use the attributes and methods of the class

Class method can use static method

Class method can use the class Or instance call


#For more articles about classes and methods in Python object-oriented programming, please pay attention to the PHP Chinese website!


Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template