初始Python(11)__类

Python类

Python的类,是定义一个具有相同属性、方法的一个类别。

比如,把汽车这个名词是一个类,我们可以称为汽车类。
汽车的属性可以是有车轮,方向盘等等,可以用来载客,泡妞等的
类可以实例化,实例化的对象则可以拥有这个类的属性和方法,比如,兰博基尼是汽车的一个实例化,所以兰博基尼则有汽车的属性和方法,有轮子,有方向盘等这个类所有的属性,也可以这个类的所有方法,可以用来泡妞,载客。。

我们在python里自定义的一个类,是为了让实例化对象有一样的属性和方法,这样就不需要每次都去写一个语句是实现相同的功能。

在python中,一个对象的特征也称为属性(attribute)。它所具有的行为也称为方法(method)
结论:对象=属性+方法

在python中,把具有相同属性和方法的对象归为一个类(class)

类的私有属性:
__private_attrs两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问
在类内部的方法中使用时self.__private_attrs

类的方法

在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self的作用是,一旦该方法被实例化引用,比如A.speak(),speak方法中的self就相当于A这个实例,实际是在告知这个参数是被哪个实例引用了。相当于speak(A)=A.speak()

类定义

#类定义
class people:

#定义基本属性
name = ‘‘
age = 0

#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0

#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w

def speak(self):
print("%s is speaking: I am %d years old" %(self.name,self.age))

>>>jack = people(‘tom‘,10,30) #创建p实例
>>> jack.speak() #引用speak方法
hello!

>>> jack.height=120 #添加height属性
>>> jack.height
120

初始化对象

创建类时,可以定义一个特定的方法,名为__init__(),只要创建这个类的一个实例,就会运行这个方法。可以向__init__()方法传递参数,这样创建对象时就可以把属性设置为你希望的值,__init__()这个方法会在创建对象时完成初始化

类和类继承

1.单继承

class <类名>(父类名)

<语句>
eg.

class childbook(book)
age = 10

2.类的多重继承

class 类名(父类1,父类2,....,父类n)
<语句1>

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索

即方法在子类中未找到时,从左到右查找父类中是否包含方法

class SchoolMember:
    """Represents any School Member"""

    def __init__(self, name,age):     #关于__init__见下文的__init__解析
        self.name = name
        self.age = age
        print ‘Initailized SchoolMember: %s‘ %(self.name)

    def tell(self):
        ‘‘‘Tell my details.‘‘‘
        print ‘Name: %s,Age:%s‘ %(self.name,self.age),

class Teacher(SchoolMember):
    ‘‘‘Represents a Teacher.‘‘‘

    def __init__(self,name,age,salary):
        SchoolMember.__init__(self,name,age) #关于这一句见下文的子类构造器
        self.salary = salary
        print ‘Initailized Teacher: %s‘ %self.name

    def tell(self):
        SchoolMember.tell(self)
        print ‘salary: %d‘ %self.salary

class Student(SchoolMember):
‘‘‘Represents a student.‘‘‘

    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print ‘(Initialized Student: %s)‘ % self.name

    def tell(self):
        SchoolMember.tell(self)
        print ‘Marks: "%d"‘ % self.marks

t = Teacher(‘Mrs. Shrividya‘, 40, 30000)
s = Student(‘Swaroop‘, 22, 75)
print # prints a blank line

members = [t, s]

for member in members:
    member.tell() # works for both Teachers and Students

运行结果如下:
Initailized SchoolMember: Mrs. Shrividya
Initailized Teacher: Mrs. Shrividya
Initailized SchoolMember: Swaroop
(Initialized Student: Swaroop)

Name: Mrs. Shrividya,Age:40 salary: 30000
Name: Swaroop,Age:22 Marks: "75"

子类构造器注意点:如果需要,每个子类最好定义它自己的构造器,不然,基类的构造器会被调用(若是子类没有定义构造器,即__Init__方法,则子类在运行的时候,会自动调用基类的构造器)。然而,如果子类重写基类的构造器,基类的构造器就不会被自动调用了--这样,基类的构造器就必须显式写出才会被执行,像我们上面那样,用SchoolMember.__init__(self,name,age)设置名字和年龄。我们的子类在构造器后面几行还设置了另外一个实例属性:薪水salary。

class P(object):
    def __init__(self):
        print "calling P‘s constructor"

class C(P):
    def __init__(self):
        print "calling C‘s constructor"

>>> c = C()
calling C‘s constructor

#如果想调用基类的 __init__(),需要明确指出,使用一个子类的实例去调#用基类(未绑定)方法。相应地更新类C,会出现下面预期的执行结果:

class C(P):
    def __init__(self):
        P.__init__(self)
        print "calling C‘s constructor"

>>> c = C()
calling P‘s constructor
calling C‘s constructor

上边的例子中,子类的__init__()方法首先调用了基类的的__init__()方法。这是相当普遍(不是强制)的做法,用来设置初始化基类,然后可以执行子类内部的设置。这个规则之所以有意义的原因是,你希望被继承的类的对象在子类构造器运行前能够很好地被初始化或作好准备工作,因为它(子类)可能需要或设置继承属性。

关于__init__:

class A(object):
    def __init__(self,name):
        self.name=name

    def getName(self):
        return ‘A ‘+self.name

#当执行:
a=A(‘hello‘)

#相当于:
a=object.__new__(A)
A.__init__(a,‘hello‘)
#即__init__作用是初始化已实例化后的对象
时间: 2024-12-24 12:57:38

初始Python(11)__类的相关文章

python: 字典,类与 &quot;switch&quot;

python中是没有switch语法的,我在练习的时候想使用类似switch的功能,搜索相关内容知道了使用字典可以完成我想要的步骤.于是,开始动手. 我使用的是python3,并且在练习使用tkinter模块写个小游戏:乒乓球.测试阶段,首先我敲入: from tkinter import * 从而加载tkinter模块,并使用 * 使得在之后的代码输入中可以稍打一些代码.在这之后,我构想在创建一个canvas类变量,并在上面画一个矩形,通过左右方向键控制矩形移动从而模拟球拍.测试的完整代码为:

python里的类与一切事物都是对象

对于python,一切事物都是对象,对象基于类创建 列如 name='csdcs' li=[1,3,43] 上面两个都是对象,因为它们都是python中的 类里面存着许多的功能,功能的集合,     对象里存着具体输入的值,与类的内存地址 当对象要进行操作实现不同的功能时,它就会根据保存的内存地址去寻找类引用里面的功能 这样,避免了,功能相同的对象里面,每个对象都去保存相同的功能,它们功能相同都直接去引用类里的功能就行了,类里面就保存了它们的功能 所以对象都是基于类创建的 列如: ll=[11,

Python中的类(上)

在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象. 例如,下面创建了一个Student的类,并且实现了这个类的初始化函数"__init__": class Student(object): count = 0 books = [] def __init__(self, name, age): self.name = name self.age = age pass 接下来就通过上面的Student类来看看Python中类的相关内容. 数据属性

Python小白__网络层级

Python小白__网络分析 刚刚开始接触Python,为了怕遗忘,所以写个博文方便自己回顾,也可以和大家分享,有不同意见,大家共同探讨学习. 网络层级 第一篇是对于网络的一些看法和感想,不只是Python 众做周知,在现在的网络时代,最重要的就是网络通信,通信的方式有甚多 ,有Http,TCP,UDP等等,其不同程序语言实现方式也很多,但是底层的通信原理都相差不多.所以就有了一个网络通信的网络层级之分. 一般网络层级分为四层,分别为:应用层,传输层,网络层,链路层. 假如现在A要传递一条数据给

【转】Python 之 元类

原文链接: https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python      http://python.jobbole.com/21351/ 以下代码测试环境为ptyon2.7 类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>&

python之定义类创建实例

https://www.cnblogs.com/evablogs/p/6688938.html 类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 1 2 >>>class Person(object):           #所有的类都是从object类继承               pass                 #pass先不做任何处理,先跳过,为了防止语法错误 创建类的属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 &g

Python中的类和方法使用举例

1.类的属性 成员变量对象的创建创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法,句柄用于区分不同的对象,对象的属性和方法,与类中的成员变量和成员函数对应,obj = MyClass()创建类的一个实例,扩号对象,通过对象来调用方法和属性 类的属性 类的属性按使用范围分为公有属性和私有属性类的属性范围,取决于属性的名称,共有属性---在内中和内外都能够调用的属性私有属性---不能在内外贝类以外函数调用定义方式:以""双下划线开始的成员变量就是私有属性

python进阶三(面向对象编程基础)【3-1 python中创建类属型】

python中创建类属性 类是模板,而实例则是根据类创建的对象. 绑定在一个实例上的属性不会影响其他实例,但是,类本身也是一个对象,如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份. 定义类属性可以直接在 class 中定义: 1 class Person(object): 2 address = 'Earth' 3 def __init__(self, name): 4 self.na

对python中元类的理解

1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: >>> class ObjectCreator(object): - pass - >>> my_object = ObjectCreator() >>> print my_object <__main__.ObjectCreator object at 0x8974f2c> 但是,Python中的类还远不止如此.类同样也是一