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