Python面向对象

class Person:
    def __init__(self,name):
        self.name = name
    def sayHi (self) :
        print "Hello, my name is", self.name
p = Person('Swaroop')
p.sayHi()

这里,我们把__init__ 法定义为取 个参数name(以及普通的参数self)。在这个__init__ ,我们只是创建 个新的域,也称为name。注意它们是两个 同的变 ,尽管它们有相同的名字。点号使我们能够区分它们。最重要的是,我们没有专 调 __init__ 法,只是在创建 个类的新实 的时候,把参数包括在圆括号内跟在类名后 ,从 传递给__init__ 法。这是这种 法的重要之处。现在,我们能够在我们的 法中使 self.name域。这在sayHi 法中得到 验证。


类:属性、方法
# -*- coding: UTF-8 -*-

class Dog:
    # 属性

    # 方法
    def eat(self):
        print("小狗在吃翔--")

    def drink(self):
        print("小狗在喝水--")

    def introduce(self):
        print("%s的年龄是%d" % (self.name,self.age))

dongsi = Dog()
dongsi.eat()
dongsi.drink()

dongsi.name = "东四" # 添加属性
dongsi.age = 10
print(dongsi.name)
dongsi.introduce()

__init__和__str__方法:
# -*- coding: UTF-8 -*-

class Dog:
    # 属性
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age

    def __str__(self):
        return "%s的年龄是%d" %(self.name,self.age)

    # 方法
    def eat(self):
        print("小狗在吃翔--")

    def drink(self):
        print("小狗在喝水--")

    def introduce(self):
        print("%s的年龄是%d" % (self.name,self.age))

dongsi = Dog("东四",10)
dongsi.eat()
dongsi.drink()
dongsi.introduce()
print dongsi

打印:
小狗在吃翔--
小狗在喝水--
东四的年龄是10
东四的年龄是10

# 面向对象:
# -*- coding: UTF-8 -*-

class Dog:
    
    # 类属性
    num = 0

    # 属性
    def __init__(self, new_name, new_age):
        self.name = new_name
        self.age = new_age

    def __str__(self):
        return "%s的年龄是%d" %(self.name,self.age)

    # 方法
    def eat(self):
        print("小狗在吃翔--")

    def drink(self):
        print("小狗在喝水--")

    def introduce(self):
        print("%s的年龄是%d" % (self.name,self.age))

    def set_dogAge(self,new_dogAge):
        self.dogAge = new_dogAge

    def __privateMethod(self):
        print "私有方法" # 对象无法调用

dongsi = Dog("东四",10)
dongsi.eat()
dongsi.drink()
dongsi.introduce()
print dongsi,dongsi.age
# print dongsi.dogAge # 这样是拿不到dogAge的,会报错

# 打印结果:
小狗在吃翔--
小狗在喝水--
东四的年龄是10
东四的年龄是10 10


# 继承:
# 注:私有方法和私有属性不会被继承
# -*- coding: UTF-8 -*-

class Animal:
    def eat(self):
        print "-- eat --"

    def drink(self):
        print "-- drink --"

class Dog(Animal):
    def wangwang(self):
        print "-- wangwang --"

    def eat(self):
        # 重写父类Animal的eat方法
        print "-- Dog eat --"
        Animal.eat(self) # 同时调用父类被重写的方法
        # super().eat() # Python3中可以这样调用父类

animal = Animal()
animal.eat()

wangcai = Dog()
wangcai.drink()
wangcai.eat()

# 打印结果:
-- eat --
-- drink --
-- Dog eat --
-- eat --


# 多继承:
class C(A, B): # 这个类的意思是继承了A和B两个类,可以使用两个类中的公有方法和属性
    pass


# 多态
# -*- coding: UTF-8 -*-

class Dog(object):
    def print_self(self):
        print "-- Dog - print_self --"

class Xiaotian(Dog):
    def print_self(self):
        print "-- Xiaotian - print_self --"

def introduce(temp):
    temp.print_self()

dog1 = Xiaotian()
dog2 = Dog()
introduce(dog1)
introduce(dog2)

# 打印结果:
-- Xiaotian - print_self --
-- Dog - print_self --


# 类属性和类方法:
实例属性:和具体的某个实例对象有关系,并且一个实例对象和另外一个实例对象是不共享属性的
类属性:类属性所属于类对象,并且多个实例对象之间共享同一个类属性
# -*- coding: UTF-8 -*-

class Dog():
    # 类属性
    num = 0
    time = 0

    def __init__(self, new_name):
        self.name = new_name
        Dog.num += 1

    # 类方法
    @classmethod
    def TimeAdd(cls):
        cls.time += 100

    # 静态方法,可以不传self或其他参数,可以被类调用,也可以被实例对象调用
    # 一般既和类没有关系,又和实例没有关系,可以使用静态方法
    @staticmethod
    def print_menu():
        print "-- staticmethod - print_menu --"

dongsi = Dog("dongsi")
xiaotian = Dog("xiaotian")
Dog.TimeAdd()
# dongsi.TimeAdd() # 类方法也可以由其创建的对象去调用

print Dog.num, Dog.time

# 打印结果:2, 100









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值