📜  Python类和对象

📅  最后修改于: 2022-05-13 01:55:06.920000             🧑  作者: Mango

Python类和对象

类是用户定义的蓝图或原型,从中创建对象。类提供了一种将数据和功能捆绑在一起的方法。创建一个新类会创建一种新类型的对象,允许创建该类型的新实例。每个类实例都可以附加属性以维护其状态。类实例也可以有方法(由它们的类定义)来修改它们的状态。

为了理解创建类的必要性,让我们考虑一个示例,假设您想要跟踪可能具有不同属性(如品种、年龄)的狗的数量。如果使用列表,第一个元素可以是狗的品种,而第二个元素可以代表它的年龄。假设有 100 只不同的狗,那么你怎么知道哪个元素应该是哪个?如果您想为这些狗添加其他属性怎么办?这缺乏组织,这是对课程的确切需求。

类创建一个用户定义的数据结构,其中包含自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用。一个类就像一个对象的蓝图。

Python类的一些要点:

  • 类由关键字 class 创建。
  • 属性是属于一个类的变量。
  • 属性始终是公共的,可以使用点 (.)运算符进行访问。例如:Myclass.Myattribute
Class Definition Syntax:

class ClassName:
    # Statement-1
    .
    .
    .
    # Statement-N

定义一个类——

Python3
# Python3 program to
# demonstrate defining
# a class
 
class Dog:
    pass


Python3
# Python3 program to
# demonstrate instantiating
# a class
 
 
class Dog:
     
    # A simple class
    # attribute
    attr1 = "mammal"
    attr2 = "dog"
 
    # A sample method 
    def fun(self):
        print("I'm a", self.attr1)
        print("I'm a", self.attr2)
 
# Driver code
# Object instantiation
Rodger = Dog()
 
# Accessing class attributes
# and method through objects
print(Rodger.attr1)
Rodger.fun()


Python3
# A Sample class with init method
class Person:
   
    # init method or constructor 
    def __init__(self, name):
        self.name = name
   
    # Sample Method 
    def say_hi(self):
        print('Hello, my name is', self.name)
   
p = Person('Nikhil')
p.say_hi()


Python3
# Python3 program to show that the variables with a value 
# assigned in the class declaration, are class variables and
# variables inside methods and constructors are instance
# variables.
    
# Class for Dog
class Dog:
   
    # Class Variable
    animal = 'dog'            
   
    # The init method or constructor
    def __init__(self, breed, color):
     
        # Instance Variable    
        self.breed = breed
        self.color = color       
    
# Objects of Dog class
Rodger = Dog("Pug", "brown")
Buzo = Dog("Bulldog", "black")
 
print('Rodger details:')  
print('Rodger is a', Rodger.animal)
print('Breed: ', Rodger.breed)
print('Color: ', Rodger.color)
 
print('\nBuzo details:')  
print('Buzo is a', Buzo.animal)
print('Breed: ', Buzo.breed)
print('Color: ', Buzo.color)
 
# Class variables can be accessed using class
# name also
print("\nAccessing class variable using class name")
print(Dog.animal)


Python3
# Python3 program to show that we can create 
# instance variables inside methods
    
# Class for Dog
class Dog:
       
    # Class Variable
    animal = 'dog'     
       
    # The init method or constructor
    def __init__(self, breed):
           
        # Instance Variable
        self.breed = breed            
   
    # Adds an instance variable 
    def setColor(self, color):
        self.color = color
       
    # Retrieves instance variable    
    def getColor(self):    
        return self.color   
   
# Driver Code
Rodger = Dog("pug")
Rodger.setColor("brown")
print(Rodger.getColor())


在上面的示例中,class 关键字表示您正在创建一个类,后跟该类的名称(在本例中为 Dog)。

类对象

对象是类的实例。一个类就像一个蓝图,而一个实例是具有实际值的类的副本。这不再是一个想法,它是一只真正的狗,就像一只七岁的哈巴狗。您可以拥有许多狗来创建许多不同的实例,但是如果没有类作为指导,您将迷失方向,不知道需要哪些信息。
一个对象包括:

  • 状态:由对象的属性表示。它还反映了对象的属性。
  • 行为:它由对象的方法表示。它还反映了一个对象对其他对象的响应。
  • 身份:它为一个对象赋予一个唯一的名称,并使一个对象能够与其他对象交互。

蟒蛇类

声明对象(也称为实例化类)

当一个类的对象被创建时,该类被称为实例化。所有实例共享类的属性和行为。但是这些属性的值,即状态对于每个对象都是唯一的。一个类可以有任意数量的实例。

例子:

python声明一个对象

声明一个对象——

Python3

# Python3 program to
# demonstrate instantiating
# a class
 
 
class Dog:
     
    # A simple class
    # attribute
    attr1 = "mammal"
    attr2 = "dog"
 
    # A sample method 
    def fun(self):
        print("I'm a", self.attr1)
        print("I'm a", self.attr2)
 
# Driver code
# Object instantiation
Rodger = Dog()
 
# Accessing class attributes
# and method through objects
print(Rodger.attr1)
Rodger.fun()

输出:

mammal
I'm a mammal
I'm a dog

在上面的示例中,创建了一个对象,它基本上是一只名叫 Rodger 的狗。这个类只有两个类属性告诉我们Rodger 是狗和哺乳动物。

自己

  • 类方法在方法定义中必须有一个额外的第一个参数。当我们调用方法时,我们不给这个参数一个值, Python提供了它。
  • 如果我们有一个不带参数的方法,那么我们仍然必须有一个参数。
  • 这类似于 C++ 中的 this 指针和Java中的 this 引用。

当我们将此对象的方法称为 myobject.method(arg1, arg2) 时, Python会自动将 this 转换为 MyClass.method(myobject, arg1, arg2) - 这就是特殊的 self 的全部内容。

__init__ 方法

__init__ 方法类似于 C++ 和Java中的构造函数。构造函数用于初始化对象的状态。与方法一样,构造函数也包含在创建对象时执行的语句(即指令)集合。它在类的对象被实例化后立即运行。该方法对于执行您想要对对象执行的任何初始化很有用。

Python3

# A Sample class with init method
class Person:
   
    # init method or constructor 
    def __init__(self, name):
        self.name = name
   
    # Sample Method 
    def say_hi(self):
        print('Hello, my name is', self.name)
   
p = Person('Nikhil')
p.say_hi()

输出:

Hello, my name is Nikhil

类和实例变量

实例变量用于数据,对每个实例都是唯一的,类变量用于类的所有实例共享的属性和方法。实例变量是在构造函数或方法中使用 self 赋值的变量,而类变量是在类中赋值的变量。

使用构造函数定义实例变量。

Python3

# Python3 program to show that the variables with a value 
# assigned in the class declaration, are class variables and
# variables inside methods and constructors are instance
# variables.
    
# Class for Dog
class Dog:
   
    # Class Variable
    animal = 'dog'            
   
    # The init method or constructor
    def __init__(self, breed, color):
     
        # Instance Variable    
        self.breed = breed
        self.color = color       
    
# Objects of Dog class
Rodger = Dog("Pug", "brown")
Buzo = Dog("Bulldog", "black")
 
print('Rodger details:')  
print('Rodger is a', Rodger.animal)
print('Breed: ', Rodger.breed)
print('Color: ', Rodger.color)
 
print('\nBuzo details:')  
print('Buzo is a', Buzo.animal)
print('Breed: ', Buzo.breed)
print('Color: ', Buzo.color)
 
# Class variables can be accessed using class
# name also
print("\nAccessing class variable using class name")
print(Dog.animal)       

输出:

Rodger details:
Rodger is a dog
Breed:  Pug
Color:  brown

Buzo details:
Buzo is a dog
Breed:  Bulldog
Color:  black

Accessing class variable using class name
dog

使用普通方法定义实例变量。

Python3

# Python3 program to show that we can create 
# instance variables inside methods
    
# Class for Dog
class Dog:
       
    # Class Variable
    animal = 'dog'     
       
    # The init method or constructor
    def __init__(self, breed):
           
        # Instance Variable
        self.breed = breed            
   
    # Adds an instance variable 
    def setColor(self, color):
        self.color = color
       
    # Retrieves instance variable    
    def getColor(self):    
        return self.color   
   
# Driver Code
Rodger = Dog("pug")
Rodger.setColor("brown")
print(Rodger.getColor()) 

输出:

brown