python的第三天学习

面向对象编程
类与对象是面向对象编程的的两个主要方面,一个类可以创建一种新的类型,其中对象就是类的实例。
可以这样来类比:你可以拥有类型 int的变量,也就是说存储整数的变量是int类的实例(对象)。

  1. self
    类与普通的函数只有一种特定的区别----前者必须多加一个参数在参数列表开头,这个名字必须添加到参数列表的开头,但是你不用在调用这个功能时,为这个参数赋值,Python会为他提供。
    这个特定的变量引用的是对象本身,按照惯例,他被赋予self这一名字。

  2. 一个简单的类
class Person:
         pass      #一个空的代码块
 
p=Person()
print(p)       

输出结果:

<__main__.Person instance at 0x10171f518>
  1. 方法
    类与对象一如函数那般,都可以带有方法(Method),唯一的不同在于我们还有一个额外的self变量。
class Person:
           def say_hi(self):
           print('Hello,how are you?')

p=Person()
p.say_hi()
# 前面两行也可以写作:
# Peson().say_hi

输出结果:

Hello,how are you ?
  1. __init__方法
    __init__方法会在类的对象被实例化时,立即运行。这一方法可以对任何你想进行操作的目标对象进行初始化操作。
class Person:
         def __init__(self,name):
              self.name=name

          def say_hi(self):
                 print('Hello,my name is,self.name)
                
p=Person('Swaroop')
p.say_hi()

输出结果:

Hello,my name is Swaroop
  1. 类变量与对象变量
    类的变量是共享的,-----他们可以被属于该类的所有实例访问。该类变量只拥有一个副本,当任何一个对象对类变量做出改变时,发生的变动将在其他所有实例中都会得到体现。

    对象变量由类的每一个独立的对象或实例所拥有。在这种情况下,每个对象都拥有属于他自己字段的副本,也就是说,他不会被共享,也不会以任何方式与其他不同实例中的相同名称的字段产生关联。

# coding=UTF-8

class Robot:
           """表示一个带有名字的机器人"""
         # 一个类变量,用来技术机器人的数量
         population=0

         def __init__(self,name):
              """初始化数据"""
              self.name=name
              print("Initializing {})".format(self.name)
             
             # 当有人被创建时,机器人将会增加人口数量
             Robot.population+=1
       def die(self):
             """我挂了"""
             print("{} is being destroyed!".format(self.name)
 
             Robot.population-=1
             if Robot.population==0:
                print("{} was the last one.".format(self.name)
            else:
                  print("There are still {:d} robots working.".format(Robot.population))
                  
        def  say_hi(self):
               """来自机器人的诚挚问候
               没问题,你做得到的"""
               print("Greetings,my master call me {}.".format(self.name))
   
   @classmothod
   def how_many():
          """打印当前的人口数量"""
          print(" We have {:d} robots.".format(cls.population))

droid1=Robot.("R2-D2")
droid1.say_hi()
Robot.how_many()

droid2=Robot.("C-3PO")
droid2.say_hi()
Robot.how_many()
                 
print('\nRobots can do some work here.\n')

print("Robots have finished their work. So let's destroy them.")
droid1.die()
droid2.die()
Robot.how_many()

输出结果:

(Initializing R2-D2)
Greetings, my masters call me R2-D2.
We have 1 robots.

(Initializing C-3PO)
Greetings, my masters call me C-3PO.
We have 2 robots.

Robots can do some work here.

Robots have finished their work. So let's destroy them.

R2-D2 is being destroyed!
There are still 1 robots working.

C-3PO is being destroyed!
C-3PO was the last one.

We have 0 robots.
  1. 继承
    面向对象编程的一大优点是对代码的重用,重用的一张实现方法就是通过继承机制。
# coding=UTF-8

class SchoolMember:
           '''代表任何学校里的成员。'''
           
         def __init__(self, name, age):
               self.name = name
               self.age = age
                print('(Initialized SchoolMember: {})'.format(self.name))
                
      def tell(self):
           '''告诉我有关我的细节。'''
            print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")
            
class Teacher(SchoolMember):
         '''代表一位老师。'''
         def __init__(self, name, age, salary):
              SchoolMember.__init__(self, name, age)
             self.salary = salary
            print('(Initialized Teacher: {})'.format(self.name))
            
       def tell(self):
             SchoolMember.tell(self)
             print('Salary: "{:d}"'.format(self.salary))
             
class Student(SchoolMember):
            '''代表一位学生。'''
          def __init__(self, name, age, marks):
                SchoolMember.__init__(self, name, age)
               self.marks = marks
               print('(Initialized Student: {})'.format(self.name))
         def tell(self):
                SchoolMember.tell(self)
                print('Marks: "{:d}"'.format(self.marks))
                
 t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)

# 打印一行空白行
print()

members = [t, s]
for member in members:
      # 对全体师生工作
       member.tell()

输出结果:

(Initialized SchoolMember: Mrs. Shrividya)
(Initialized Teacher: Mrs. Shrividya)
(Initialized SchoolMember: Swaroop)
(Initialized Student: Swaroop)

Name:"Mrs. Shrividya" Age:"40" Salary: "30000"
Name:"Swaroop" Age:"25" Marks: "75"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值