Python 类和对象


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

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

语法:类定义

class ClassName:
    # Statement

语法:对象定义

obj = ClassName()
print(obj.atrr)

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

Python 类的一些要点:

  • 类是通过关键字class 创建的。
  • 属性是属于某个类的变量。
  • 属性始终是公共的,可以使用点 (.) 运算符进行访问。例如:我的班级.Myattribute

创建 Python 类

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

  • Python3
class Dog:
    sound = "bark"

Python 类的对象

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

一个对象由以下部分组成:

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

蟒蛇类

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

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

例子:

python 声明一个对象

Python 类和对象的示例

在 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 是狗和哺乳动物。

解释 :

在此示例中,我们创建了一个 Dog 类,并创建了两个类变量attr1 和 attr2。我们创建了一个名为fun()的方法,它返回字符串“I'm a, {attr1}”和 I'm a, {attr2}。我们创建了 Dog 类的对象,并在该对象的attr1处进行打印。最后,我们调用fun() 函数。

自参数

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

  • Python3
class GFG:
    def __init__(self, name, company):
        self.name = name
        self.company = company

    def show(self):
        print("Hello my name is " + self.name+" and I" +
            " work in "+self.company+".")


obj = GFG("John", "GeeksForGeeks")
obj.show()

Self参数并不称其为 Self,您可以使用任何其他名称来代替它。这里我们将 self 改为某人,输出将是相同的。

  • Python3
class GFG:
    def __init__(somename, name, company):
        somename.name = name
        somename.company = company

    def show(somename):
        print("Hello my name is " + somename.name +
            " and I work in "+somename.company+".")


obj = GFG("John", "GeeksForGeeks")
obj.show()

输出:两个代码的输出将是相同的。

Hello my name is John and I work in GeeksForGeeks.

解释:

在此示例中,我们正在创建一个 GFG 类,并在构造函数中创建了名称和公司实例变量。我们创建了一个名为say_hi()的方法,它返回字符串“Hello my name is ” + {name} +”,我在“+{company}+”工作。”。我们创建了一个 person 类对象,并将名称 John 和 Company GeeksForGeeks 传递给实例变量。最后,我们调用该类的show() 。

通过声明

程序的执行不受pass语句不作为的影响。它仅允许程序跳过该部分代码而不执行任何操作。当 Python 的语法约束要求有效的语句但不必执行有用的代码时,经常使用它。

  • Python3
class` `MyClass:``  ``pass

init() 方法

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

  • Python3
# 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

解释:

在此示例中,我们正在创建一个 Person 类,并在构造函数中创建了一个name实例变量。我们创建了一个名为 say_hi() 的方法,它返回字符串“Hello,我的名字是 {name}”。我们创建了一个 person 类对象,并将名称 Nikhil 传递给实例变量。最后,我们调用该类的 say_hi()。

str() method

Python 有一个名为str()的特殊方法。用于定义对象应如何表示为字符串。它通常用于为对象提供人类可读的文本表示形式,这有助于记录、调试或向用户显示对象信息。当类对象使用内置函数 print() 和 str() 创建字符串时,会自动使用str()函数。您可以通过定义str()方法来更改**类**的对象在字符串中的表示方式。

  • Python3
class GFG:
    def __init__(self, name, company):
        self.name = name
        self.company = company

    def __str__(self):
        return f"My name is {self.name} and I work in {self.company}."


my_obj = GFG("John", "GeeksForGeeks")
print(my_obj)

输出:

My name is John and I work in GeeksForGeeks.

解释:

在此示例中,我们将创建一个名为 GFG 的类。在该类中,我们将创建两个实例变量name 和 company。在 str() 方法中,我们返回名称实例变量和公司实例变量。最后,我们创建 GFG 类的对象,并调用 str() 方法。

类和实例变量

实例变量用于数据,对于每个实例都是唯一的,类变量用于类的所有实例共享的属性和方法。实例变量是在构造函数或方法内部使用 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

解释:

定义名为 Dog 的类,并将类变量设置为字符串“dog”。类变量由类的所有对象共享,并且可以使用类名进行访问。Dog 类有两个实例变量Breed 和 Color。稍后我们将创建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())

输出:

brown

解释:

在此示例中,我们定义了一个名为Dog的类,并 创建了一个类变量animal。我们在构造函数中创建了一个实例变量breed 。Dog类由两个方法setColorgetColor组成,它们用于创建和初始化实例变量以及检索实例变量的值。我们创建了Dog类的对象,并将实例变量值设置为棕色,并在终端中打印该值。


原文链接:codingdict.net