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)。
类对象
对象是类的实例。一个类就像一个蓝图,而一个实例是具有实际值的类的副本。这不再是一个想法,它是一只真正的狗,就像一只七岁的哈巴狗。您可以拥有许多狗来创建许多不同的实例,但是如果没有类作为指导,您将迷失方向,不知道需要哪些信息。
一个对象包括:
- 状态:由对象的属性表示。它还反映了对象的属性。
- 行为:它由对象的方法表示。它还反映了一个对象对其他对象的响应。
- 身份:它为一个对象赋予一个唯一的名称,并使一个对象能够与其他对象交互。
声明对象(也称为实例化类)
当一个类的对象被创建时,该类被称为实例化。所有实例共享类的属性和行为。但是这些属性的值,即状态对于每个对象都是唯一的。一个类可以有任意数量的实例。
例子:
声明一个对象——
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